天天看點

IOC和DI,AOP的本質了解

IOC: Inversion of Control,控制反轉, 控制權從應用程式轉移到架構(如IOC容器),是架構共有的特性。

對于IOC的了解,可以把IOC看作是一個生産和管理bean對象的容器。原本程式中我們要手動自己建立(new)的對象統統交給Spring的IOC容器幫我們建立。同時這就意味着,要産生的單例的bean,這個對象的生命周期也是有IOC容器管理。

Spring中IOC的三種實作方式:

1.屬性注入,或叫做set方法注入;

2.構造方法注入;

3.注解注入,可能因為友善的原因,這種方式免去了臃腫的配置,是以比較常用。

Spring的有點主要是根據IOC和AOP實作的,之前有簡單提到AOP的實作思想,這些都是針對工廠模式和代理模式的友好封裝。IOC主要解決了代碼的高度耦合問題,AOP将面向切面的程式設計思想做出了最好的解釋和應用。

這裡順帶簡單解釋一下Spring中的IOC,DI,AOP:

       IOC就是控制反轉,通俗的說就是我們不用自己建立執行個體對象,這些都交給Spring的bean工廠幫我們建立管理。這也是Spring的核心思想,通過面向接口程式設計的方式來是實作對業務元件的動态依賴。這就意味着IOC是Spring針對解決程式耦合而存在的。在實際應用中,Spring通過配置檔案(xml或者properties)指定需要執行個體化的java類(類名的完整字元串),包括這些java類的一組初始化值,通過加載讀取配置檔案,用Spring提供的方法(getBean())就可以擷取到我們想要的根據指定配置進行初始化的執行個體對象。

       AOP就是将程式功能中的頻繁出現或者與主業務邏輯代碼相關度不高的代碼抽離出來,通過切面程式設計的方式在想要調用的時候引入調用的思想。而這種思想并不是隻限于Spring和java,AOP(面向切面)和OOP(面向對象)一樣都是一種程式設計思想,這種思想的實作機制在Spring中便是應用了java的動态代理和java的反射。在實際程式設計中,我們通常會遇到一些交叉業務邏輯(比如:日志,事務,安全等等),這是我們就可以封裝一個封面,然後注入到目标對象(具體的業務邏輯)中去。ps:很多方法都會抛出異常資訊,這是我們就可以寫一個攔截器,在這個類中實作記錄錯誤日志的功能,再在Spring的xml配置檔案中配置一個對這些要記錄日志的方法的AOP攔截器,在這個方法執行後調用這個攔截器來記錄日志。這樣就不用每次抛出異常都要手動的去單獨處理記錄,提高了程式的内聚性。這種在調用某個方法之前/後想要自動執行一系列自定義操作的就是AOP思想。

總結:

IOC即控制反轉,一種将控制權轉移的設計模式,由傳統的程式控制轉移到容器控制;

DI即依賴注入,将互相依賴的對象分離,在Spring的配置(注解)中描述它們之間的依賴關系,這些依賴關系也隻在使用時才被建立。

AOP即面向切面,一種程式設計思想,OOP的延續。将系統中非核心的業務提取出來,進行單獨處理。

Spring的AOP和IOC都是為了解決代碼的耦合度的實際應用,使得代碼的重用度變高,便于維護。但這些都不是Spring中特有的,我們可以說Spring将它們應用的更靈活。

引用前者:絡慶鐘朔
文章内容來源于日常積累和網絡資源,轉載請注明出處,向每一個分享技術資源的開發者緻謝。