Spring IOC要點

一 什麼是IOC

IOC即Inversion of Control,控制反轉,是面向對象編程中的一種設計原則,可以用來降低機代碼之間的耦合度。Spring IOC是將類的依賴關係和生成交給了Spring容器去管理,至於我們自己的app則可以不需要去關係這些對象的產生了。

 

二 IOC與DI的關係

實現IOC有多種方式,比如DI(Dependency Injection 依賴注入)和DL(Dependency Lookup 依賴查找);因此,DI是實現IOC的一種方式。

 

三 Spring配置類關係的三種方法,也即Spring編程風格

schemal-based-------xml

annotation-based-----annotation

java-based----java Configuration

 

四 Spring依賴注入的兩種方法

  • Constructor-based Dependency Injection:基於構造函數注入
  • Setter-based Dependency Injection:基於setter方法注入

 

五 自動裝配

IOC的注入有兩個地方需要提供依賴關係,一是類的定義中,二是在spring的配置中需要去描述。自動裝配則把第二個取消了,即我們僅僅需要在類中提供依賴,繼而把對象交給容器管理即可完成注入。

autowire屬性有如下六個取值,他們的說明如下:

        1)No:即不啓用自動裝配。Autowire默認的值。默認情況下,需要通過"ref"來裝配bean。

        2)byName:按名稱裝配。可以根據屬性的名稱在容器中查詢與該屬性名稱相同的bean,如果沒有找到,則屬性值爲null。假設Boss類中有一個名爲car的屬性,如果容器中剛好有一個名爲car的Bean,Spring就會自動將其裝配給Boss的car屬性。

        3)byType:按類型裝配。可以根據屬性類型,在容器中尋找該類型匹配的bean,如有多個,則會拋出異常,如果沒有找到,則屬性值爲null。假設Boss類中有一個Car類型的屬性,如果容器中剛好有一個Car類型的Bean,Spring就會自動將其裝配給Boss的這個屬性。

        4)constructor:與byType方式相似,不同之處在與它應用於構造器參數,如果在容器中沒有找到與構造器參數類型一致的bean,那麼將拋出異常。(根據構造函數參數的數據類型,進行byType模式的自動裝配。)

        5)autodetect:通過bean類的自省機制(introspection)來決定是使用constructor還是byType的方式進行自動裝配。如果Bean有空構造器那麼將採用“byType”自動裝配方式,否則使用“constructor”自動裝配方式。

        6)default:由上級標籤<beans>的default-autowire屬性確定。

 

六 springbean的作用域

 

七 Singleton 當中引用了一個Prototype的bean

Singleton 當中引用了一個Prototype的bean的時候,Prototype bean使用autoware引入的話,在初始的時候生成一個實例,後面不會再生成其他實例。若要發揮Prototype特性,可以使用lookup註解引入。

 

八 懶加載與非懶加載

懶加載:對象使用的時候纔去創建,節省資源,但是不利於提前發現錯誤。

非懶加載:容器啓動的時候立刻創建對象。消耗資源。利於提前發現錯誤。

當scope=“prototype” (多例)時,默認以懶加載的方式產生對象。

當scope=“singleton” (單例)時,默認以非懶加載的方式產生對象。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章