- 1、前言
-
2、嵌套方法拦截失效
- 2.1 问题场景
- 2.2 解决方案
-
2.3 原因分析
- 2.3.1 原理
- 2.3.2 源代码分析
-
3、Spring事务在多线程环境下失效
- 3.1 问题场景
- 3.2 解决方案
- 3.3 原因分析
- 4、总结
Spring AOP在使用过程中需要注意一些问题,也就是平时我们说的陷阱,这些陷阱的出现是由于Spring AOP的实现方式造成的。对于这些缺陷本人坚持的观点是:一是每一样技术都或多或少有它的局限性,很难称得上完美,只要掌握其实现原理,在使用时不要掉进陷阱就行,也就是进行规避;二是更进一步讲,我们应该接受这就是技术本身的特点,也说不上什么缺陷,它本身就在“那里”,只是我们要的结果是“这样”,而它表现的是“那样”,恰好不是我们想要的而已。
对于Spring AOP的陷阱,我总结了以下两个方面,现在分别进行介绍。
2、嵌套方法拦截失效
2.1 问题场景
通过例子来讲解这样更好,首先加上注解配置:
<!-- 启用注解式AOP -->
<aop:aspectj-autoproxy/>
然后定义一个切面,代码如下:
@Aspect @Component public class AnnotationAspectTest { @Pointcut("execution(* *.action(*))") public void action() { } @Pointcut("execution(* *.work(*))") public void work() { } @Pointcut("action() || work())") public void compositePointcut() { } //前置通知 @Before("compositePointcut()") public void beforeAdvice() { System.out.println("before advice................."); } //后置通知 @After("compositePointcut()") public void doAfter() { System.out.println("after advice.................."); } }