读书人

Spring AOP配备补充

发布时间: 2012-11-03 10:57:44 作者: rapoo

Spring AOP配置补充
感觉之前写的那Spring配置中的AOP太繁琐了。现在小小的整理一下。
(1)在xml中的配置

<aop:config proxy-target-ref="recordLog"><aop:pointcut expression="execution(* com.lrl.action.Login.userLogin(String)) and args(name)"id="recordPoint" />//带参数了!<aop:around method="recordLogs" pointcut-ref="recordPoint" /></aop:aspect></aop:config>

(2)还可以在类中配置
//直接在方法上
@Around("execution(* com.lrl.action.Register.userRegister(String)) && args(name)")public void recordLogs1(ProceedingJoinPoint jp, String name)throws Throwable {System.out.println("1234");jp.proceed();System.out.println(name);}

//或者可以选择在外面定义切点
@Pointcut("execution(* com.lrl.action.Register.userRegister(String))")public void reg(){};//切点名,任意的@Around("reg() && args(name)")//里面包含了切点名和参数列表public void recordLogs(ProceedingJoinPoint jp, String name)throws Throwable {               System.out.println(name);jp.proceed();}

当然,一个通知可以有多个切点
@Pointcut("execution(* com.lrl.action.Register.userRegister(String))")public void reg(){};//切点1@Pointcut("execution(* com.lrl.action.Register.userLogin(String))")public void login(){};//切点2@Pointcut(" reg() || login()")//可以这样合并        public void  combine(){};//合并切点@Around("reg() || login()")//可以这样用!//@Around("combine()")也可以这样用,效果是一样的!public void recordLogs(ProceedingJoinPoint jp, String name)throws Throwable {      System.out.println(name);     jp.proceed();}


//这里还说明几点:
(1)ProceedingJoinPoint是针对于环绕通知的。
(2)JoinPoint是前置、后置等通知的
(3)xml中参数列表用and args(xxx),类中可以用 && args(xxx)或and args(xxx).
(4)返回值等的应用可以参考Spring配置那篇文章。(虽然阅读困难,但是将就一下把。呵呵)
(5)有说的不对的地方,请留言。没做过很大量的实验测试。见谅~以后会补充完善的
(6)注意:最好不要某个类的所有方法都进行AOP切入,否则有时候切入的是getter等方法的时候,其他页面需要数据,会导致为空!具体原因可能是内部机制,现在还不是很了解。以后了解补充!

读书人网 >编程

热点推荐