在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------------------ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www./dtd/spring-beans.dtd"> <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------------------ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www./dtd/spring-beans.dtd"> <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> ==================
|
|
来自: 樱花梦_张艺馨 > 《Spring从入门到精通》