@EnableAspectJAutoProxy(proxyTargetClass = true, exposeProxy = true)
proxyTargetClass = true : 表示使用CGLIB实现代理类;默认为false:使用JDK实现代理类。
exposeProxy = true : 表示是否对外暴露代理对象,即是否可以获取AopContext。通常用于拦截嵌套调用的方法。如自调用方法的拦截:
分析:AOP拦截的本质是为调用的对象生成了一个代理对象,而自调用使用 this关键字
获取到的是原对象而非代理对象也就不会进行拦截了。
解决:将自调用改为 ((TargetObject) AopContext.currentProxy()).function()
, 即获取当前代理对象进行函数调用。