基於動態代理的AOP內部調用註解失效解決方法

一、背景

使用AOP動態代理增強統一修改方法,但是由於proxy對象調用invoke方法後,方法再內部自調用時是用的this原對象來調用方法,故無法進行代理

二、解決方法

  1. 使用ApplicationContext.getBean()獲取代理對象調用

  2. 加上註解@EnableAspectJAutoProxy(proxyTargetClass = true, exposeProxy = true),然後使用AopContext.currentProxy()方法

  3. @Autowired注入自己

  4. 參考lombok使用字節碼技術

  • 自定義註解@AopInnerSupport
  • 繼承AbstractProcessor類,處理攜帶@AopInnerSupport的類
  • 在方法前面按方法3注入proxy代理對象
  • 不停遞歸JCExpressionJCStatement找到滿足條件的方法
  • 然後修改this.method()和super.method()成proxy.method()

AST參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章