正常写法的场景下,可能还会失效的两类:
- 被修饰的方法是
private or protected
的 - 被修饰的方法是类的内部私有方法(然后因为上一条而被迫改成public)
解决方式:
private or protected
==>public func
- 类中循环注入一个本类,然后调用内部方法从
(this.)func()
改为classProxy.func()
(这种写法可能单测就炸了,一个地方虽然少些代码,但是其他地方不能不出现里很多无关问题,/(ㄒoㄒ)/~~)
原因:
- aop也是基于cglib动态代理,而这种反射的方式,默认都是仅支持
public
(虽然可以通过某些方式绕过实现) - aop是动态代理,则说明所有需要被aop的地方,实际上也是强依赖代理对象的,也就说说,对于类的内部私有方法,只能通过
代理类.私有方法()
的途径来实现aop的切入,否则任何类似当前类.私有方法()
都是不能被aop接管的
参考:
- https://segmentfault.com/q/1010000014962043
- http://xiaobaoqiu.github.io/blog/2015/05/18/spring-aopwu-xiao/
- https://www.liaoxuefeng.com/wiki/1252599548343744/1339039378571298
- https://segmentfault.com/a/1190000014346303
- https://zhuanlan.zhihu.com/p/441096617