Spring學習-----bean的裝配(6)

        上一節中,我們學了繼承配置和通過構造函數來裝配bean,通過繼承配置的方式來裝配bean,可以實現子類和父類的功能。通過構造函數來裝配bean,要注意的就是相應的有參構造函數要存在,當然無參的構造函數也應該存在。這一節中,我們來學習自動裝配。

         本文中涉及到的bean有兩個,一個是Dog.java,另一個是Master.java,其中Master.java中有一個Dog屬性。

       

有四種自動裝配的類型:

1、byName  尋找和屬性名相同的bean。若找不到,則裝不上

2、byType     尋找和屬性類型相同的bean。若找不到,則裝不上,若找到多個,拋異常

3、constructor   查找和bean的構造參數一致的一個或多個bean。若找不到或者找到多個,拋異常。按照參數的類型裝配

4、autodetect  (3)和(2)之間選一個方式,不確定到底選擇哪個

5、no:不自動裝配,這是autowire的默認值。

6、default  :這個需要在<beans default-autowire="指定" />


            PS:不推薦使用自動裝配,因爲自動裝配往往不能直觀的看出哪些屬性被配置了。

            PS:如果<beans>指定了default-autowire屬性,那麼所有beandefault屬性值就是這個。如果沒有指定default-autowire屬性,則default-autowire的默認值是no

    PS:如果使用自動裝配同時使用手動裝配,那麼自動裝配的屬性,將被手動裝配的屬性覆蓋。

        



(1)ByName 

         當程序執行到標註紅字的時候,就會調用配置文件中的代碼,實例化其中的bean對象。首先在內存中創建一個dog對象,然後創建一個master對象。master對象中有一個dog屬性,此時,就會根據autowire的方式來配置這個屬性,此時是“ByName”,那麼程序就會根據id來查找,看是否有一個“dog”的對象,發現有,ok成功裝配。這就是“ByName”的自動裝配方式。當然,如果dog對象的id不是“dog”而是“cat”或是其他的名稱,再次運行的話會發現程序報錯。這就從側面說明了,我們的dog對象的id不是隨便取的,而是和master屬性中的Dog類型的引用名稱一致的。



(2)ByType

如果選擇了ByType類型,那麼就會根據dog所屬的類來尋找對象,如果找到的不唯一,那麼還是會報錯的。


可以看到,此時的id是不是dog都已經無所謂了。



(3)constructor

 當你選擇了這種方式的時候,在master.java中必須要有一個這樣的構造函數

當然,如果master中還有別的構造函數,比如說什麼Master(Dog dog,String name)之類的,那就GG了。



(4)autodetect

(5)default


在beans中,我們可以用default-autowire="指定類型"的方式來設定默認的裝配類型,如果沒有指定的話那麼就是“no”

在對象的配置中,我們也可以設置“autowire”,默認的情況下是“default”,也就是你在beans中設置的匹配類型。如果自己設置的話,那就以自己設置的爲準。




-----------------------------------------------------------------------------------------------------

引入特殊的bean

      有時候我們需要對數據庫進行設置,大家都知道,數據庫的配置信息我們一般是放在properties配置文件中的,在Spring中,有一個特殊的bean來幫助我們實現對配置文件的讀取。

如果我們想引入兩個配置文件的話,我們只需要在location中加入另一個配置文件的路徑,用","隔開。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章