AopContext.currentProxy遇到的坑


Spring的切面功能,是通過代理的方式來實現的,實現方式有JDK動態代理方式及Cglib的方式。

有時需要在service層通過AOP做一些日志、權限、監控等功能,但在service中進行自調用時,無法再次走進代理類中,因此會導致漏日志的情況出現。

此時,可通過AopContext.currentProxy()來解決問題。用AopContext.currentProxy().xxxx()的方式代替this.xxxx()的自調用方式。
AopContext.currentProxy()的本質是使用的ThreadLocal生成本地代理,這樣的做法可能影響性能,后續文章對ThreadLocal的內部原理和性能進行進一步深入!
AopContext.currentProxy()的局限性:

  1)AopContext.currentProxy()調用的方法中,如果此方法再調用其他的service,則此方法必須是public的修飾符。否則會發現通過@Autowired注入的service值為null。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM