自动装配是为了减少指定属性的需要,比如在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则不进行检查。