天天看點

Spring架構之控制反轉IoC(Inversion of Control)的了解

控制反轉就是将代碼的調用權(控制權)從調用方轉移給被調用方(服務提供方)。

解釋一下:

如果我們需要建立某個類,就需要程式員去修改代碼,然後才可以得到想要的類。反轉的意思就是不需要程式員去直接操作代碼,而是通過服務方

(Spring)讓架構的機制幫助程式員獲得想要的對象,而程式員隻需要修改配置檔案,不用關心對象是怎麼建立的。

如果 UserDao 接口被多個不同的類實作,那麼在service層就要多次修改标藍色的代碼。

比如:增加一個 UserDaoMySqlImpl 類去實作 UserDao 接口

那麼如果在service層需要使用這個類,就要修改代碼:

如果增加一千個類去實作這個接口,那麼代碼将被程式員修改一千次,這是很不合理的。

成員變量是UserDao接口類,但是并不去實作它,給一個實作的方法去實作。

這樣我們在調用不同的實作類的時候就可以這麼寫代碼:

這也是一種反轉,本身如果使用者需要使用某一個服務類,需要程式員修改内部代碼來實作,

現在程式員隻需要給使用者提供接口,使用者根據需求填入參數就可以得到想要的類。

之前的主動權在程式,在程式員。

現在的主動權在調用者,就是調用 setUserDao( )方法的人,

程式成為了被動者。

這就是通過定義一個方法,以傳參數的形式來傳回一個類對象,而不用在類内部初始化另一個類,降低了代碼的耦合性。

控制反轉IoC(Inversion of Control),是一種設計思想,DI(Dependency Injection)依賴注入是實作IoC的一種方法。

是程式和IoC容器的反轉

之前如果程式想要獲得某個對象,就直接自己主動去建立,主動權在程式。

有了IoC容器之後,

程式擷取對象的主動權給了IoC容器,程式成為了被動的接收者,

隻需要等待容器去建立對象并接收,不需要去主動修改代碼獲得對象。

控制反轉是一種通過描述(XML或注解)并通過第三方去生産或擷取特定對象的方式。

在Spring中實作控制反轉的是IoC容器,其實作方法是依賴注入(Dependency Injection,DI)。

依賴:程式依賴IoC容器

注入:IoC容器幫助程式注入到某個對象需要的外部資源(比如給對象的變量指派)

參考自:https://blog.csdn.net/jisuanjiguoba/article/details/81532965

    https://www.kuangstudy.com/zl/ssm#1381801414325481474

繼續閱讀