舉例:項目 di-xml
bean 實例在調用無參構造器創建了空值對象后,就要對 bean對象的屬性進行初始化。初始化是由容器自動完成的,稱為注入。
根據注入方式的不同,常用的有兩類:設值注入、構造注入。
設值注入是指,通過 setter 方法傳入被調用者的實例。這種注入方式簡單、直觀,因而在 Spring 的依賴注入中大量使用。
舉例:
當指定 bean 的某屬性值為另一 bean 的實例時,通過 ref 指定它們間的引用關系。ref 的值必須為某 bean 的 id 值。
對于其它 Bean 對象的引用,除了標簽的 ref 屬性外,還可以使用標簽。
構造注入是指,在構造調用者實例的同時,完成被調用者的實例化。即,使用構造器設置依賴關系。
舉例:
標簽中用于指定參數的屬性有:
name:指定參數名稱。
index:指明該參數對應著構造器的第幾個參數,從 0 開始。不過,該屬性不要也行, 但要注意,若參數類型相同,或之間有包含關系,則需要保證賦值順序要與構造器中的參數順序一致。
舉例:di03 包
● 為數組注入值
● 為 List 注入值
● 為 Set 注入值
● 為 Map 注入值
● 為 Properties 注入值
● 復雜集合屬性的注入
MyCollections 類中增加新的屬性
在容器配置文件注入方式:
對于引用類型屬性的注入,也可不在配置文件中顯示的注入。可以通過為標簽設置autowire屬性值,為引用類型屬性進行隱式自動注入(默認是不自動注入引用類型屬性)。根據自動注入判斷標準的不同,可以分為兩種:
byName:根據名稱自動注入
byType:根據類型自動注入
當配置文件中被調用者 bean 的 id 值與代碼中調用者 bean 類的屬性名相同時,可使用byName 方式,讓容器自動將被調用者bean注入給調用者 bean。容器是通過調用者的bean類的屬性名與配置文件的被調用者bean的id進行比較而實現自動注入的。
舉例:
使用 byType 方式自動注入,要求:配置文件中被調用者 bean 的 class 屬性指定的類,要與代碼中調用者 bean 類的某引用類型屬性類型同源。即要么相同,要么有 is-a 關系(子類,或是實現類)。但這樣的同源的被調用 bean 只能有一個。多于一個,容器就不知該匹配哪一個了。
舉例:
為應用指定多個Spring 配置文件
在實際應用里,隨著應用規模的增加,系統中Bean數量也大量增加,導致配置文件變得非常龐大、臃腫。為了避免這種情況的產生,提高配置文件的可讀性與可維護性,可以將Spring 配置文件分解成多個配置文件。
將配置文件分解為地位平等的多個配置文件,并將所有配置文件的路徑定義為一個String 數組,將其作為容器初始化參數出現。其將與可變參的容器構造器匹配。
各配置文件間為并列關系,不分主次。
舉例:
各配置文件中有一個總文件,總配置文件將各其它子文件通過引入。在 Java代碼中只需要使用總配置文件對容器進行初始化即可。
舉例:
也可使用通配符*。但,此時要求父配置文件名不能滿足*所能匹配的格式,否則將出現循環遞歸包含。就本例而言,父配置文件不能匹配 spring-*.xml 的格式,即不能起名為 spring-total.xml。