Spring Bean的自動裝配

2021-07-31 08:44:29 字數 2235 閱讀 8445

當bean的屬性很少的時候,我們對它進行配置的時候就使用很少的或者元素進行裝配,但是隨著工程體積的增大,bean也可能變得複雜,這時候配置檔案也會變得複雜,就會變得很多,寫起來就會很費勁,還好spring為我們提供了自動裝配的機制。

spring ioc容器可以自動裝配bean,只需要在的autowire屬性中指定裝配的模式。

首先建立乙個person類,生成getter和setter方法,重寫tostring方法:

因為屬性中依賴address類和car類,然後繼續建立這兩個類,生成getter方法和setter方法,重新tostring方法:

接下來進行配置:

這是我們正常配置時候的樣子,讓我們執行一下:

結果沒有問題。

這是例子比較簡單,屬性比較少,但是可以拓展思維的想象,如果屬性很多的話,綠色矩形中的p標籤就會越來越多,接下來我們就使用自動裝配的功能。

spring自動裝配的模式有以下4種:

1. byname(根據名稱自動裝配):根據bean的名字(或者id)和當前bean的setter風格的屬性進行

自動裝配,如果有匹配的則進行裝配,沒有的匹配的則該屬性不進行裝配。

我們修改配置檔案:

這樣對於person,就會根據setter對應屬性名字去和bean進行匹配,通過id匹配address、通過name匹配car。執行一下:

沒毛病,證明自動裝配成功了。

我們修改一下address的名字然後執行一下:

由結果可以看到address的值為null,證明如果沒有匹配到合適的bean就不進行裝配。

2. bytype(根據型別自動裝配):根據bean的型別和當前bean的屬性的型別進行自動裝配,若沒有匹配的則不進行裝配。

我們把autowire的方式修改為bytype,執行一下:

看到雖然address的id為address1,但是最後還是裝配成功了,因為bytype匹配的是bean的型別,但是這種方式存在問題,ioc容器中有乙個以上的型別匹配的bean,就會丟擲異常,我們新增乙個bean,car2,然後發現編譯器直接就報錯了,執行更不要說了,丟擲了org.springframework.beans.factory.nouniquebeandefinitionexception異常,告訴我們匹配的bean不是唯一的。

3. constructor(通過構造器自動裝配):根據構造器入參的型別匹配相同型別的bean進行注入,和bytype類似,就不放截圖了,當出現相同型別的多個bean時也會有問題,當有多個構造器的時候情況也會很複雜,平時使用的很少。

4. autodetect:首先嘗試使用constructor進行自動裝配,如果失再嘗試使用bytype進行自動裝配。

在bean配置檔案中涉及autowire屬性進行自動裝配將會配置bean的所有屬性,然而,若只希望裝配個別屬性時,autowire就不夠靈活了。

autowire要麼根據型別自動裝配要麼根據名字自動裝配,不能兩者兼顧。

在一般情況下,在實際的專案中很使用自動裝配的功能,因為和自動裝配功能帶來的好處比起來,明確清晰的配置文件更好一些。

spring bean的自動裝配

spring bean的自動裝配 在spring框架應用場景中會有這麼一種情況。乙個bean在不同的使用類裡面都要配置。這個bean相對來說是單獨的。也就是說如果要裝配這個bean.在不同的使用類裡面都需要寫相關的 注入 那有沒有這麼一種方式。可以通過配置自動的來注入bean到相關的屬性中去。spr...

Spring Bean的自動裝配

乙個bean使用其他的bean,除了顯式的配置xml檔案外,也可以通過配置 bean 的autowire屬性來實現bean的自動裝配。自動裝配的好處是減少了構造器注入和setter注入配置 其實就是少了 property 標籤,但是bean裡面set方法還是必須的 減少了配置檔案的長度。spring...

學習spring bean自動裝配

spring 容器可以在不使用和元素的情況下 自動裝配 相互協作的 bean 之間的關係,這有助於減少編寫乙個大的基於 spring 的應用程式的 xml 配置的數量。下列自動裝配模式,它們可用於指示 spring 容器為來使用自動裝配進行依賴注入。你可以使用元素的 autowire 屬性為乙個 b...