• 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..................");
    }
}
View Code

相关文章: