Spring AOP的失效场景

  • 首先,Spring的AOP其实是通过动态代理实现的,所以,想要让AOP生效,前提必须是动态代理生效,并且可以调用到代理对象的方法
  • 什么情况下会不走代理对象的调用呢?
  • 首先就是类内部的调用,比如一些私有方法调用,内部类调用,以及同一个类中方法的自调用等
  • 如:

    Spring AOP的失效场景_第1张图片

  • 以上,都是因为在对象内部直接调用其他方法,就会用原始对象直接调用了,不会调用到代理对象,所以代理会失效
  • 类似的还有一种情况,虽然不是对象的自调用,但是他也是因为没有调用到代理对象,那就是调用static方法,因为这类方法是属于这个类的,并不是对象的,所以无法被AOP

    Spring AOP的失效场景_第2张图片

  • 还有一种方法,也无法被代理,那就是final方法,由于AOP是通过创建代理对象来实现的,而无法对final方法进行子类化和覆盖,所以无法拦截这些方法

    Spring AOP的失效场景_第3张图片

  • 所以,那么总结一下就是以下几种情况,会导致代理失效,AOP不起作用:
    • 1、私有方法调用
    • 2、静态方法调用
    • 3、final方法调用
    • 4、类内部自调用
    • 5、内部类方法调用

你可能感兴趣的:(Spring,spring,java,后端)