今天遇到一个问题,针对某个类做了切面,pointcut中添加了需要切面的方法,但一直未生效,没有进到切面方法中,最后通过询问同事发现了原因。
我是对XXXServiceImpl中的方法A()进行了切面,我理解一旦别的地方调用A()方法都会进入到切面中,现在我有一处逻辑是XXXServiceImpl中的方法B()中调用了方法A(),在调用B()方法时却不会进入切面。但如果直接调用方法A()却可以进入切面。
也就是xxxService.A();可以进入切面,而xxxService.B();却不会进入切面,即使B()中调用了A()方法。
具体的原因是:"切面的产生是spring 自己做了一个新的类,包在原有的类外面。所以从类外面调用的时候可以走切面,已经在类里面的调用不会绕到外面去。"