自動裝配是爲了減少指定屬性的需要,比如在XML定義了bean A,bean B包含了A,對B進行配置時,可以通過自動裝配減少對A的設定。
先寫個類:
//HelloWord.java
import java.util.Date;
public class HelloWorld{
private String msg = null;
private Date date = null;
public HelloWorld(String msg,Date date){
this.msg = msg;
this.date = date;
}
//set get方法省略
}
byName模式
HelloWorld.java 包含一個date變量,通過byName模式會找一個叫做date的Bean定義,然後來設置date屬性。
<bean id="helloWorld" class="com.jeysine.test.HelloWorld" autowrite="byName">
<property name="msg" value="HelloWorld" />
</bean>
<bean id="date" class="java.util.Date" />
byType模式
byType模式會查找XML文件與之類型一致的bean進行裝配,如果多於一個,就會拋出一個異常。若查找不到,則什麼也不做,可以根據dependency-check=“object”指定該情況拋出異常。
<bean id="helloWorld" class="com.jeysine.test.HelloWorld" autowrite="byType">
<property name="msg" value="HelloWorld" />
</bean>
<bean id="date" class="java.util.Date" />
constuctor
costructor模式根據構造函數的參數來查找合適類型的bean進行裝配
<bean id="helloWorld" class="com.jeysine.test.HelloWorld" autowrite="constructor">
<property name="msg" value="HelloWorld" />
</bean>
<bean id="date" class="java.util.Date" />
aurodetect模式
自動選擇byType或者constructor模式,優先選擇constructor模式。
<bean id="helloWorld" class="com.jeysine.test.HelloWorld" autowrite="autodetect">
<property name="msg" value="HelloWorld" />
</bean>
<bean id="date" class="java.util.Date" />
no模式
不使用自動裝配,則要對包含的bean進行配置。
<bean id="helloWorld" class="com.jeysine.test.HelloWorld" autowrite="autodetect">
<property name="msg" value="HelloWorld" />
<property name="date">
<ref local="date"/>
</property>
</bean>
<bean id="date" class="java.util.Date" />
對自動裝配的補充
由於自動裝配是隱式的,我們不知道是否屬性已經設定完成。故可以通過dependency-check屬性對其進行設定依賴檢查。若屬性都有默認的值,則不需要依賴檢查。
依賴檢查有四種模式:simple,object,all,none。
- simple只對基本類型,字符串,集合進行依賴檢查。
- object會對依賴的對象進行檢查;
- all是對全部屬性進行依賴檢查;
- none則不進行檢查。