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將它們應用的更靈活。

引用前者:絡慶鍾朔


免責聲明!

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



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