AOP和IOC的區別


二者沒有聯系。ioc是控制反轉,aop是面向事務。

IOC就是一個生產和管理bean的容器就行了,原來需要在調用類中new的東西,現在都是通過容器生成,同時,要是產生的是單例的bean,他還可以給管理bean的生命周期。

AOP技術它利用一種稱為"橫切"的技術,剖解開封裝的對象內部,並將那些影響了多個類的公共行為封裝到一個可重用模塊,並將其命名為"Aspect",即切面。所謂"切面",簡單說就是那些與業務無關,卻為業務模塊所共同調用的邏輯或責任封裝起來,便於減少系統的重復代碼,降低模塊之間的耦合度,並有利於未來的可操作性和可維護性。

 

1、定義不同

ioc:控制反轉(Inversion of Control,縮寫為IoC),是面向對象編程中的一種設計原則,可以用來減低計算機代碼之間的耦合度。

aop:面向切面編程,通過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術。

2、功能不同

ioc:Class A中用到了Class B的對象b,一般情況下,需要在A的代碼中顯式的new一個B的對象。

采用依賴注入技術之后,A的代碼只需要定義一個私有的B對象,不需要直接new來獲得這個對象,而是通過相關的容器控制程序來將B對象在外部new出來並注入到A類里的引用中。而具體獲取的方法、對象被獲取時的狀態由配置文件(如XML)來指定。

aop:將日志記錄,性能統計,安全控制,事務處理,異常處理等代碼從業務邏輯代碼中划分出來,通過對這些行為的分離,我們希望可以將它們獨立到非指導業務邏輯的方法中,進而改變這些行為的時候不影響業務邏輯的代碼。

3、實現項目不同

ioc:現有的框架實際上使用以下三種基本技術的框架執行服務和部件間的綁定:

類型1 (基於接口): 可服務的對象需要實現一個專門的接口,該接口提供了一個對象,可以重用這個對象查找依賴(其它服務)。早期的容器Excalibur使用這種模式。

類型2 (基於setter): 通過JavaBean的屬性(setter方法)為可服務對象指定服務。HiveMind和Spring采用這種方式。

類型3 (基於構造函數): 通過構造函數的參數為可服務對象指定服務。PicoContainer只使用這種方式。HiveMind和Spring也使用這種方式。

aop:AOP是一個概念,並沒有設定具體語言的實現,它能克服那些只有單繼承特性語言的缺點(如Java),AOP具體實現有以下幾個項目:

AspectJ (TM): 創建於Xerox PARC. 有近十年歷史,成熟

缺點:過於復雜;破壞封裝;需要專門的Java編譯器。

動態AOP:使用JDK的動態代理API或字節碼Bytecode處理技術。

基於動態代理API的具體項目有:

JBoss 4.0 JBoss 4.0服務器

基於字節碼的項目有:

aspectwerkz ,spring


免責聲明!

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



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