以前在 Spring AOP 應用篇,講述了 AOP 的使用,這一篇來說一些 Spring AOP的實現原理。java
Spring 主要經過兩種技術來實現 AOP,Java 動態代理 和 CGLib 動態代理設計模式
因爲知識點比較多,單獨寫來一篇文章,參考 設計模式之動態代理框架
參考 CGLib 動態代理工具
既然有兩種技術能夠實現,那麼實際運用時,到底選擇的是哪種呢?post
默認的選擇策略是性能
實際應用中常常遇到這樣的狀況,那麼這多個AOP的執行順序是怎麼樣的呢,答案是鏈式調用設計
在使用 Spring AOP 的過程當中,咱們常常用的 Aspectj的註解。好比 @Aspect、@Pointcut、@Before、@After等代理
哪一個這個 Aspectj 是什麼呢接口
Aspectj 也是一個 AOP 框架,與 Spring AOP不一樣的是,它不是經過動態代理實現的。而是在編譯時,就把代理方法植入到目標方法中get
Spring AOP 雖然引用了Aspectj的一些核心概念,好比Aspect、advice、joinpoint等,也使用了AspectJ中的一些註解。好比@pointCut、@after、@before等。
但Spring AOP 並非 Aspectj,它不會向 Aspectj同樣,在編譯時,就把代理方法植入到目標方法中。它只是用了一些 Aspectj的工具,並對java動態代理和CGLIB代理作了一層封裝,因此實際上Spring AOP和Aspectj的關係並不大