spring的自動裝配

1.在應用中,我們常常使用<ref>標籤爲JavaBean注入它依賴的對象,同時也Spring爲我們提供了一個自動裝配的機制,在定義Bean時,<bean>標籤有一個autowire屬性,我們可以通過指定它來讓容器爲受管JavaBean自動注入依賴對象。<bean>的autowire屬性有如下六個取值,他們的說明如下:

1、 No:即不啓用自動裝配。Autowire默認的值。之所以它的默認值爲NO,那是因爲這會破壞模塊關係的可讀性,spring的reference也建議不用autoware,原文如下: Note: as has already been mentioned, for larger applications, it is discouraged to use autowiring because it removes the transparency and the structure from your collaborating classes.

2、 byName:根據屬性名自動裝配。此選項將檢查容器並根據名字查找與屬性完全一致的bean,並將其與屬性自動裝配。 如: <bean id="userManagerTarget" autowire="byName">      <property name="baseDAO"/> </bean>    這樣對於bean userManagerTarget的屬性baseDAO,spring就會自動去引用同名的bean,也就是上面的聲明和下面是等價的: <bean id="userManagerTarget" autowire="no">      <property name="baseDAO">         <ref local="baseDAO"/>      </property> </bean>

3、 byType:如果容器中存在一個與指定屬性類型相同的bean,那麼將與該屬性自動裝配;如果存在多個該類型bean,那麼拋出異常,並指出不能使用byType方式進行自動裝配;如果沒有找到相匹配的bean,則什麼事都不發生,也可以通過設置dependency-check="objects"讓Spring拋出異常。

4、 constructor:與byType方式類似,不同之處在於它應用於構造器參數。如果容器中沒有找到與構造器參數類型一致的bean, 那麼拋出異常。 reference原文是: This is analogous to byType, but applies to constructor arguments. If there isn't exactly one bean of the constructor argument type in the bean factory, a fatal error is raised.

5、 autodetect:通過bean類的內省機制(introspection)來決定是使用constructor還是byType方式進行自動裝配。如果發現默認的構造器,那麼將使用byType方式,否則採用 constructor。 原文如下: Chooses constructor or byType through introspection of the bean class. If a default constructor is found, byType gets applied.

6、 default:由上級標籤<beans>的default-autowire屬性確定。

注意:在配置bean時,<bean>標籤中Autowire屬性的優先級比其上級標籤高,即是說,如果在上級標籤中定義default-autowire屬性爲byName,而在<bean>中定義爲byType時,Spring IoC容器會優先使用<bean>標籤的配置。

小結:使用自動裝配,配置文件簡潔了許多。但是,自動裝配並不是十全十美的,我們不論是使用byName還是byType的方法,Spring不一定就能很準確的爲我們找到JavaBean依賴的對象。在這種情況下,你務必遵守javabean的命名規範,另外,如果使用自動裝配,Spring配置文件的可讀性也大大降低,我們不能很容易的看出個bean之間的依賴關係,這也在一定程度上降低了程序可維護性;也容易造成潛在的錯誤,比如說通過byName來裝配,如果將屬性 名字改了後,Spring就不會將其自動裝配給Bean的屬性了。

因此在使用自動裝配時,應當權衡利弊,合理的與ref的方法相結合,儘量在降低工作量的同時,保證應用的可維護度。但是spring的reference還是不推薦在定義中用這個功能

轉自:http://www.cnblogs.com/cyjch/archive/2012/02/06/2340411.html

發佈了11 篇原創文章 · 獲贊 9 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章