在Spring配置文件中,所以AOP相关定义必须放在<aop:config>标签下,该标签下可以有<aop:pointcut>、<aop:advisor>、<aop:aspect>标签,配置顺序不可变。
- <aop:pointcut>:用来定义切入点,该切入点可以重用;
- <aop:advisor>:用来定义只有一个通知和一个切入点的切面;
- <aop:aspect>:用来定义切面,该切面可以包含多个切入点和通知,而且标签内部的通知和切入点定义是无序的;和advisor的区别就在此,advisor只包含一个通知和一个切入点。
下面的例子是转载别人的,我在这里只是方便我自己学习和使用,添加一些说明。
原文:http://blog.csdn.net/yantingmei/article/details/22426971?utm_source=tuicool&utm_medium=referral
MyAspect.java
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.After;import org.aspectj.lang.annotation.AfterReturning;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.springframework.core.annotation.Order;
public class MyAspect { public void authority(JoinPoint jp) { System.out.println("被代理方法名字:"+jp.getSignature().getName()); System.out.println("被代理方法参数:"+jp.getArgs()); System.out.println("被代理对象:"+jp.getTarget()); System.out.println("现在调用的是权限验证"); } public void log(JoinPoint jp,Object rvt){ System.out.println("被代理方法名字:"+jp.getSignature().getName()); System.out.println("被代理方法参数:"+jp.getArgs()); System.out.println("被代理对象:"+jp.getTarget()); System.out.println("被代理对象的返回值"+rvt); System.out.println("现在调用的是日志管理"); } public Object processTx(ProceedingJoinPoint pjp) throws Throwable{ System.out.println("现在调用的是事务开启"); //得到业务方法的参数 Object[] args=pjp.getArgs(); System.out.println("业务方法的参数:"+args); //被代理对象的业务方法 Object result=pjp.proceed(args); System.out.println("现在调用的是事务提交或回滚"); return result; } public void release(){ System.out.println("资源已经被释放!"); }}
UserDao.java
@Componentpublic class UserDao { public String save(String name){ System.out.println(name+"被保存"); return "success"; }}
applicationContext.
<? ="http://www.w3.org/2001/ ="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <!-- 切面 --> <bean id="myAspect" class="net.csdn.www.aop.MyAspect"></bean>
<!--被切面--> <bean id="userDao" class="net.csdn.www.dao.UserDao"></bean> <!-- 切入点 --> <aop:config> <aop:aspect id="asp1" ref="myAspect"> <!-- id(随便) ref(切面bean)--> <aop:before method="authority" pointcut="execution(* net.csdn.www.dao.*.*(..))" /> <!--method(切面的方法) 后两个*可以分别具体到类、方法--> <aop:after method="release" pointcut="execution(* net.csdn.www.dao.*.*(..))" /> <aop:after-returning method="log" pointcut="execution(* net.csdn.www.dao.*.*(..))" returning="rvt" /> <aop:around method="processTx" pointcut="execution(* net.csdn.www.dao.*.*(..))" /> </aop:aspect> </aop:config></beans>
测试类Test.java
public class Test { public static void main(String[] args) { ApplicationContext context=new ClassPath); UserDao userDao=(UserDao) context.getBean("userDao"); userDao.save("csdnccccccc"); }}
原标题:spring aop的xml配置详解
关键词:Spring