Spring Beans 自動(dòng)裝配

2022-05-21 17:46 更新

你已經(jīng)學(xué)會(huì)如何使用<bean>元素來聲明 bean 和通過使用 XML 配置文件中的<constructor-arg><property>元素來注入 。

Spring 容器可以在不使用<constructor-arg><property> 元素的情況下自動(dòng)裝配相互協(xié)作的 bean 之間的關(guān)系,這有助于減少編寫一個(gè)大的基于 Spring 的應(yīng)用程序的 XML 配置的數(shù)量。

自動(dòng)裝配模式

下列自動(dòng)裝配模式,它們可用于指示 Spring 容器為來使用自動(dòng)裝配進(jìn)行依賴注入。你可以使用<bean>元素的 autowire 屬性為一個(gè) bean 定義指定自動(dòng)裝配模式。

模式 描述
no 這是默認(rèn)的設(shè)置,它意味著沒有自動(dòng)裝配,你應(yīng)該使用顯式的bean引用來連線。你不用為了連線做特殊的事。在依賴注入章節(jié)你已經(jīng)看到這個(gè)了。
byName 由屬性名自動(dòng)裝配。Spring 容器看到在 XML 配置文件中 bean 的自動(dòng)裝配的屬性設(shè)置為 byName。然后嘗試匹配,并且將它的屬性與在配置文件中被定義為相同名稱的 beans 的屬性進(jìn)行連接。
byType 由屬性數(shù)據(jù)類型自動(dòng)裝配。Spring 容器看到在 XML 配置文件中 bean 的自動(dòng)裝配的屬性設(shè)置為 byType。然后如果它的類型匹配配置文件中的一個(gè)確切的 bean 名稱,它將嘗試匹配和連接屬性的類型。如果存在不止一個(gè)這樣的 bean,則一個(gè)致命的異常將會(huì)被拋出。
constructor 類似于 byType,但該類型適用于構(gòu)造函數(shù)參數(shù)類型。如果在容器中沒有一個(gè)構(gòu)造函數(shù)參數(shù)類型的 bean,則一個(gè)致命錯(cuò)誤將會(huì)發(fā)生。
autodetect(3.0版本不支持) Spring首先嘗試通過 constructor 使用自動(dòng)裝配來連接,如果它不執(zhí)行,Spring 嘗試通過 byType 來自動(dòng)裝配。

可以使用 byType 或者 constructor 自動(dòng)裝配模式來連接數(shù)組和其他類型的集合。

自動(dòng)裝配的局限性

當(dāng)自動(dòng)裝配始終在同一個(gè)項(xiàng)目中使用時(shí),它的效果最好。如果通常不使用自動(dòng)裝配,它可能會(huì)使開發(fā)人員混淆的使用它來連接只有一個(gè)或兩個(gè) bean 定義。不過,自動(dòng)裝配可以顯著減少需要指定的屬性或構(gòu)造器參數(shù),但你應(yīng)該在使用它們之前考慮到自動(dòng)裝配的局限性和缺點(diǎn)。

限制 描述
重寫的可能性 你可以使用總是重寫自動(dòng)裝配的 <constructor-arg>和 <property> 設(shè)置來指定依賴關(guān)系。
原始數(shù)據(jù)類型 你不能自動(dòng)裝配所謂的簡單類型包括基本類型,字符串和類。
混亂的本質(zhì) 自動(dòng)裝配不如顯式裝配精確,所以如果可能的話盡可能使用顯式裝配。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)