自動(dòng)裝配,官方給出的定義是這樣:
Spring IoC容器可以自動(dòng)裝配(autowire)相互協(xié)作bean之間的關(guān)聯(lián)關(guān)系。因此,如果可能的話,可以自動(dòng)讓Spring通過檢查BeanFactory中的內(nèi)容,來替我們指定bean的協(xié)作者(其他被依賴的bean)。由于autowire可以針對單個(gè)bean進(jìn)行設(shè)置,因此可以讓有些bean使用autowire,有些bean不采用。autowire的方便之處在減少或者消除屬性或構(gòu)造器參數(shù)的設(shè)置,這樣可以給我們的配置文件減減肥 其實(shí),自動(dòng)裝配就是讓我們少些幾個(gè) <ref
="...">. 我們還是從需求出發(fā).我們假設(shè)有4個(gè)bean.分別是bean2,bean3,bean4,bean5..其中,bean2里面有后面幾個(gè) 的引用..我只放出來bean2.java. package
com.test.model;
public class Bean2 { private
Bean3 bean3; private Bean4 bean4;
private Bean5 bean5; public
Bean3 getBean3() {
return bean3;
} public
void setBean3(Bean3 bean3) {
this.bean3 = bean3;
} public
Bean4 getBean4() {
return bean4;
} public
void setBean4(Bean4 bean4) {
this.bean4 = bean4;
} public
Bean5 getBean5() {
return bean5;
} public
void setBean5(Bean5 bean5) {
this.bean5 = bean5;
}
}
我們看不用自動(dòng)裝配的寫法 <bean
id="bean2" class="com.test.model.Bean2">
<property name="bean3" ref="bean3"/>
<property name="bean4">
<ref bean="bean4"/>
</property>
<property name="bean5" ref="bean5"/>
</bean> 很明顯,下面的幾個(gè)屬性設(shè)置是很繁瑣的..我們假設(shè)使用自動(dòng)裝配.我們只需要這樣 <bean
id="bean2" class="com.test.model.Bean2" /> 里面的裝配都不用寫. 另外: 模式
說明
no
不使用自動(dòng)裝配,必須通過ref元素指定依賴,默認(rèn)設(shè)置。
byName
根據(jù)屬性名自動(dòng)裝配。此選項(xiàng)將檢查容器并根據(jù)名字查找與
屬性完全一致的bean,并將其與屬性自動(dòng)裝配。
byType
如果容器中存在一個(gè)與指定屬性類型相同的bean,那么將與
該屬性自動(dòng)裝配;如果存在多個(gè)該類型bean,那么拋出異
常,并指出不能使用byType方式進(jìn)行自動(dòng)裝配;如果沒有找
到相匹配的bean,則什么事都不發(fā)生,也可以通過設(shè)置
dependency-check="objects"讓Spring拋出異常。
constructor
與byType方式類似,不同之處在于它應(yīng)用于構(gòu)造器參數(shù)。如
果容器中沒有找到與構(gòu)造器參數(shù)類型一致的bean,那么拋出
異常。
autodetect
通過bean類的自省機(jī)制(introspection)來決定是使用
constructor還是byType方式進(jìn)行自動(dòng)裝配。如果發(fā)現(xiàn)默認(rèn)的
構(gòu)造器,那么將使用byType方式。 JavaBean 是一種JAVA語言寫成的可重用組件。為寫成JavaBean,類必須是具體的和公共的,并且具有無參數(shù)的構(gòu)造器。 javaBean自省技術(shù)
javaBean 具有的自省機(jī)制可以在不知道javaBean都有哪些屬性的情況下,設(shè)置他們的值。。 自省機(jī)制的核心是反射機(jī)制。 javaBean的自省機(jī)制主要由Introspector實(shí)現(xiàn),該接口中提供了關(guān)鍵的方法。
|