1.Aspectj AOP 是一套獨立的AOP 解決方案,不僅限於java應用,不依賴其他方案,屬於編譯時增強,有自己單獨的編譯器。Spring AOP 是基於Spring 容器的的AOP解決方式,屬於運行時增強,采用動態代理的方式實現(JDK動態代理,CGLIB動態代理),僅限於java應用使用。
(圖片來自:https://blog.csdn.net/weixin_42181142/article/details/101212351)
2.兩者聯系在於Spring AOP 預留了整合Aspectj 的入口,同時使用了Aspectj的一些代碼,如@Aspect @before 這些注解。
3.使用
(1)spring aop 使用和學習都比較簡單,二期兼容aspectj的代碼,但是他本身不是對象本身去執行,而是對象的代理去執行,這就意味着在運行時的開銷要大一點。但是如果對AOP的需求不是特別深入的話僅僅使用spring aop 就可以完成了。
(2)aspectj 支持的功能更多一下,而且運行時的開銷會更小,也更快具體用法請參考:
http://www.360doc.com/content/18/0209/22/33260087_729028400.shtml
4.spring aop 中的 < aop:aspect>與< aop:advisor>
在面向切面編程時,我們會使用< aop:aspect>,定義切面(切面包括通知和切點)
在進行事務管理時,我們會使用< aop:advisor>,引用通知和切點(切點和通知已經定義)
具體用法區別請看前面的幾篇文章。