亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Spring AOP與AspectJ

Spring AOP與AspectJ

炎炎設計 2019-10-23 14:28:09
我的印象是,Spring AOP最適合用于特定于應用程序的任務,例如安全性,日志記錄,事務等,因為它使用自定義Java5注釋作為框架。但是,AspectJ似乎是更友好的設計模式明智的選擇。誰能強調在Spring應用程序中使用Spring AOP與AspectJ的利弊?
查看完整描述

3 回答

?
夢里花落0921

TA貢獻1772條經驗 獲得超6個贊

Spring-AOP優點

  • 它比AspectJ更易于使用,因為您不必使用LTW(加載時編織)或AspectJ編譯器。

  • 它使用代理模式和裝飾器模式

Spring-AOP缺點

  • 這是基于代理的AOP,因此基本上您只能使用方法執行聯接點。

  • 在同一類中調用另一個方法時,不應用方面。

  • 運行時可能會有一點開銷。

  • Spring-AOP不能為Spring工廠未創建的任何內容添加方面

AspectJ專業人士

  • 這支持所有聯接點。這意味著您可以做任何事情。

  • 與Spring AOP相比,運行時開銷更少。

AspectJ缺點

  • 小心。檢查您的方面是否僅編織到您想編織的方面。

  • 您需要使用AspectJ編譯器進行額外的構建過程,或者必須設置LTW(加載時編織)


查看完整回答
反對 回復 2019-10-23
?
胡說叔叔

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.


查看完整回答
反對 回復 2019-10-23
?
拉風的咖菲貓

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的全景視圖可以幫助您了解兩種藥水的區別


查看完整回答
反對 回復 2019-10-23
  • 3 回答
  • 0 關注
  • 713 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號