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