在spring中,自动装配可以指定给每一个单独的Bean,因此可以给一些Bean使用自动装配而其他的Bean不使用自动装配,通过使用自动装配,开发人员可以减少之低昂属性的需要,从而节省一些属性设定的工作,使用Bean元素的autowire属性来指定Bean定义的自动装配,共有五中模式:
byName,byType,constructor,autodetect 和 no
A:使用byName模式
byName模式指的就是通过Bean的属性名字进行自动装配。
在spring的配置文档XML中,查找一个与将要装配的属性同样名字的Bean。
B:使用byType模式:
byType模式指的就是如果XML中正好有一个与属性类型一样的Bean,就自动装配成这个属性。如果有多于一个这样的Bean,就抛出一个异常,指出可能不能对那个Bean使用byType的自动装配。
C:使用constructor模式
constructor模式指的是根据构造函数的参数进行自动装配。在配置文档中,有一个id为HelloWord的Bean被设置为通过constructor自动装配,HelloWord.java包含一个构造函数方法,Spring就会根据构造函数的参数查找合适类型的Bean定义,然后用它来设置构造函数的参数的值。
D:使用autodetect模式
autodetect模式指的是通过对Bean检查类的内部来选择constructor或者byType。如果先找到constructor就用constructor,如果没有constructor,而找到了byType就用byType。
E:使用no模式:
no模式指的就是不使用自动装配,通过上面几个可以了解到,Bean的引用必须通过ref元素定义,这是默认的配置,在很多企业级的应用环境中不鼓励使用自动装配模式,因为它对于Bean之间的参考依赖关系不清晰。
总结:
显式的指定依赖,如:property和constructor-arg元素,总会覆盖自动装配。正如前面已经提到过的,对于大型的应用,不鼓励使用自动装配,因为他去除了参考依赖的透明性和清晰性。
有了自动装配后,可以减少开发人员的输入工作,但是却使开发人员很难看出Bean的每个属性是否都设定完成。如何解决这个问题,spring提出了它的一些解决方案:依赖检查的4种模式。
=================练习一:使用byName模式=====================
----------------HelloWord 类----------------
package com.gc.action;
import java.util.Date;
public class HelloWord {
private String msg;
private Date date;
// 无参构造方法
public HelloWord() {
super();
}
// 带参构造
public HelloWord(String msg) {
super();
this.msg = msg;
}
// ---getXxx 和setXxx
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
----------------------------config.xml------------------
<beans>
<bean id="HelloWord" class="com.gc.action.HelloWord" autowire="byName" >
<property name="msg">
<value>zxx</value>
</property>
</bean>
<bean id="date" class="java.util.Date"></bean>
</beans>
---------------------------------TestHelloWord 测试类-----------------
package com.gc.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import com.gc.action.HelloWord;
public class TestHelloWord {
/**
* @param args
*/
public static void main(String[] args) {
ApplicationContext ac =new FileSystemXmlApplicationContext("classpath:/config.xml");
HelloWord hw =(HelloWord) ac.getBean("HelloWord");
System.out.println(hw.getMsg()+"----"+hw.getDate());
}
}
============练习二:使用byType模式=====================
---------------------config.xml------------------
<beans>
<bean id="HelloWord" class="com.gc.action.HelloWord" autowire="byType">
<property name="msg">
<value>zxx</value>
</property>
</bean>
<bean id="date" class="java.util.Date"></bean>
</beans>
==================
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。