1. 程式人生 > >依賴注入與Bean的裝配

依賴注入與Bean的裝配

依賴注入有三種:setter注入;構造器注入;介面注入(基本不用)。其中setter注入應用最廣泛。

即為Bean中的屬性設定值(強行解釋)

Bean的裝配也有三種:XML中顯示配置;在Java的介面和類中實現配置;隱式Bean的發現機制和自動裝配原則

即宣告這個Bean,並把它放在容器裡(強行解釋)

(強行解釋)在xml中程式碼如下:

<bean id="user" class="com.lili.ssm.service.UserServiceImpl"> //bean的裝配,宣告id與class的關係

    <property name="username" value="lili" /> //依賴注入

    <property name="age" value="24" />

</bean>

<bean id="hello" class="com.maven.Hello"><constructor-arg value="hello" /></bean>這是使用構造器注入來裝配bean。

可見,二者本身就是一個概念。

最後,再確定一下裝配的概念。《spring實戰》中給裝配下了一個定義:建立應用物件之間協作關係的行為稱為裝配。也就是說當一個物件的屬性是另一個物件時,例項化時,需要為這個物件屬性進行例項化。這就是裝配。如果一個物件只通過介面來表明依賴關係,那麼這種依賴就能夠在物件本身毫不知情的情況下,用不同的具體實現進行切換。但是這樣會存在一個問題,在傳統的依賴注入配置中,我們必須要明確要給屬性裝配哪一個bean的引用,一旦bean很多,就不好維護了。基於這樣的場景,spring使用註解來進行自動裝配,解決這個問題。自動裝配就是開發人員不必知道具體要裝配哪個bean的引用,這個識別的工作會由spring來完成。與自動裝配配合的還有“自動檢測”,這 個動作會自動識別哪些類需要被配置成bean,進而來進行裝配。這樣我們就明白了,自動裝配是為了將依賴注入“自動化”的一個簡化配置的操作。

裝配分為四種:byName, byType, constructor, autodetect。byName就是會將與屬性的名字一樣的bean進行裝配。byType就是將同屬性一樣型別的bean進行裝配。constructor就是通過構造器來將型別與引數相同的bean進行裝配。autodetect是constructor與byType的組合,會先進行constructor,如果不成功,再進行byType。具體選擇哪一種裝配方式,需要配置<bean>標籤的autowire屬性,如果沒有配置,預設是byName型別,就是會根據屬性的名字來進行自動裝配。上面最常用的還是byName和byType。