spring中,自动装配可以指定给每一个单独的bean,因此可以给一些bean使用自动装配而一些bean不使用自动装配。
有5种模式 byName,byType,constructor,autodetect,no
1.byName模式
该模式就是通过bean的属性名字进行自动装配。在Spring配置文档xml中,查找一个与将要装配的属性同样名字的bean。
代码
<bean id="helloWorld" class="jp.co.xiehl.learn.ch2.action.HelloWorld" autowire="byName">
<property name="msg">
<value>HelloWorld</value>
</property>
</bean>
<bean id="date" class="java.util.Date"></bean>
HelloWorld.java
......
......
private Date date;--->根据这个属性名字去xml找相同名字的bean来装配该属性。如找不到则不装配,不报异常。
执行结果:
2010/04/28 16:05:12 org.apache.catalina.startup.Catalina start
情報: Server startup in 12719 ms
Helloworld:[date]=null ---> 没有匹配的情况的结果
2.byType
该模式就是指如果xml中正好有一个与属性类型一样的bean,就自动装配这个属性。如果有多余一个这样的bean,就抛出异常。
在xml文档中id为helloworld的bean被设置成byType装配。HelloWorld.java中包含一个Date类型的变量,spring就会查找一个类型为Date的bean的定义,然后用它来设置该属性。
示例代码
HelloWorld.java
......
......
private Date date; --->如没有匹配的bean,则什么都不会发生,属性不会被设置。如果不想要该结果,则可通过设置dependency-check="objects"来指定在这种情况下抛出异常。
xml
<bean id="helloWorld" class="jp.co.xiehl.learn.ch2.action.HelloWorld" autowire="byType" dependency-check="objects">
<property name="msg">
<value>HelloWorld</value>
</property>
</bean>
3.constructor模式
根据构造函数指定的参数进行装配。
4.autodetect模式
指的是通过对bean检查类的内部来选择constructor或byType。如没有constructor,而找到byType,就用byType。
5.no模式
不使用自动装配。必须通过ref来实现bean的引用。这是默认模式。不推荐使用自动装配。因为bean之间的参考依赖关系不清晰。
5种模式总结
显示的指定依赖,如property和constructor-arg总会自动覆盖自动装配。