3 回答

TA貢獻1772條經驗 獲得超6個贊
Spring-AOP優點
它比AspectJ更易于使用,因為您不必使用LTW(加載時編織)或AspectJ編譯器。
它使用代理模式和裝飾器模式
Spring-AOP缺點
這是基于代理的AOP,因此基本上您只能使用方法執行聯接點。
在同一類中調用另一個方法時,不應用方面。
運行時可能會有一點開銷。
Spring-AOP不能為Spring工廠未創建的任何內容添加方面
AspectJ專業人士
這支持所有聯接點。這意味著您可以做任何事情。
與Spring AOP相比,運行時開銷更少。
AspectJ缺點
小心。檢查您的方面是否僅編織到您想編織的方面。
您需要使用AspectJ編譯器進行額外的構建過程,或者必須設置LTW(加載時編織)

TA貢獻1804條經驗 獲得超8個贊
除了別人怎么說-只是另一種方式,there are two major differences:
一個與編織的類型有關。
聯接點定義的另一個。
Spring-AOP:使用以下概念通過代理進行運行時編織dynamic proxy if interface exists or cglib library if direct implementation provided.
AspectJ:AspectJ Java Tools(ajc compiler)如果有可用的源,則進行編譯時間編織,或者進行后編譯編織(使用已編譯文件)。此外,可以啟用使用Spring進行編織的加載時間-它需要aspectj定義文件并具有靈活性。
編譯時編織可以提供性能優勢(在某些情況下),還可以提供 joinpoint definition in Spring-aop is restricted to method definition only which is not the case for AspectJ.

TA貢獻1995條經驗 獲得超2個贊
Spring AOP是spring框架的重要組成部分之一。在最基本的階段,spring框架基于IoC和AOP。在Spring的官方課程中,有一張幻燈片上寫著:
AOP是框架最重要的部分之一。
理解Spring中AOP的工作原理的關鍵點是,當您使用Spring編寫Aspect時,我們會通過為您的對象構建代理來檢測框架,JDKDynamicProxy如果您的bean實現了接口,則使用CGLIB;如果您的bean不實現任何接口,則通過CGLIB接口。請記住,如果您使用的是Spring 3.2之前的版本,則必須在類路徑中包含cglib 2.2。從Spring 3.2開始,它是沒有用的,因為cglib 2.2已包含在核心中。
Bean創建時的框架將創建一個代理,該代理包裝您的對象并添加跨領域的職責,例如安全性,事務管理,日志記錄等。
以這種方式創建的代理將從一個切入點表達式開始應用,該切入點表達式將對框架進行檢測,以決定將創建哪些bean和方法作為代理。該建議將比您的代碼更具責任感。請記住,在此過程中,切入點僅捕獲未聲明為final的公共方法。
現在,在Spring AOP中,方面的編織將在容器啟動時由容器執行,而在AspectJ中,您必須通過修改字節碼對代碼進行后期編譯來執行。因此,我認為Spring方法比AspectJ更簡單,更易于管理。
另一方面,使用Spring AOP不能使用AOP的全部功能,因為實現是通過代理而不是通過修改代碼來完成的。
與AspectJ中一樣,您可以在SpringAOP中使用加載時編織。您可以在使用代理和特殊配置的Spring @EnabledLoadWeaving或XML中受益于此功能。您可以使用名稱空間作為示例。但是在Spring AOP中,您無法截獲所有情況。例如,newSpring AOP不支持該命令。
但是,在Spring AOP中,可以通過aspectof在spring配置bean中使用factory方法來受益于AspectJ的使用。
由于Spring AOP本質上是從容器創建的代理,因此您只能將AOP用于spring bean。使用AspectJ時,您可以在所有bean中使用該方面。另一個比較點是調試和代碼行為的可預測性。使用spring AOP,這項工作全部由Java編譯器執行,而方面是為Spring bean創建代理的一種非??岬姆椒āT贏spectJ中,如果您修改代碼,則需要進行更多的編譯,并且難以理解將方面編織在何處。即使在春季關閉織造也很簡單:在春季,您從配置中刪除了方面,然后重新啟動就可以了。在AspectJ中,您必須重新編譯代碼!
在加載時編織中,AspectJ比Spring更靈活,因為Spring不支持AspectJ的所有選項。但是在我看來,如果您想更改Bean的創建過程,更好的方法是在工廠中管理自定義登錄,而不是通過加載時編織方式來改變新操作員的行為。
我希望AspectJ和Spring AOP的全景視圖可以幫助您了解兩種藥水的區別
添加回答
舉報