一、背景
使用AOP動態代理增強統一修改方法,但是由於proxy
對象調用invoke
方法後,方法再內部自調用時是用的this
原對象來調用方法,故無法進行代理
二、解決方法
-
使用ApplicationContext.getBean()獲取代理對象調用
-
加上註解
@EnableAspectJAutoProxy(proxyTargetClass = true, exposeProxy = true)
,然後使用AopContext.currentProxy()
方法 -
@Autowired
注入自己 -
參考
lombok
使用字節碼技術
- 自定義註解
@AopInnerSupport
- 繼承
AbstractProcessor
類,處理攜帶@AopInnerSupport
的類 - 在方法前面按方法3注入
proxy
代理對象 - 不停遞歸
JCExpression
、JCStatement
找到滿足條件的方法 - 然後修改this.method()和super.method()成proxy.method()