Spring AOP expose-proxy
写在前面 expose-proxy。为是否暴露当前代理对象为ThreadLocal模式。 SpringAOP对于最外层的函数只拦截public方法,不拦截protected和private方法(后续讲解),另外不会对最外层的public方法内部调用的其他方法也进行拦截,即只停留于代理对象所调用的方法。 案例分析 public class AServiceImpl implements AService{ @Override public void barA() { System.out.println("AServiceImpl.barA()"); barB(); } @Override public void barB() { System.out.println("AServiceImpl.barB()"); } } 控制台的输出结果: run my before advice AServiceImpl.barA() AServiceImpl.barB() 分析: 发现aop并没有对barB方法进行增强,只是增强了barA方法。 判断上述this.barB()方法是否被拦截的最本质的东西是看this到底是谁?有如下对象B类的对象b,和cglib生成的代理对象bProxy,代理对象bProxy内部拥有b。如果调用b对象的任何方法,肯定不会发生任何拦截