Spring根据类型自动装配
Bean1.java
package com.cos.bean110321;import org.springframework.beans.factory.BeanFactory;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test { private Bean1 bean1; private Bean2 bean2; public Bean1 getBean1() { return bean1; } public void setBean1(Bean1 bean1) { this.bean1 = bean1; } public Bean2 getBean2() { return bean2; } public void setBean2(Bean2 bean2) { this.bean2 = bean2; } public static void main(String[] args) { //根据配置文件获得bean工厂 BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext_7.xml"); //取得test这个bean,转化成Test对象 Test test = (Test) factory.getBean("test"); //给Bean1的name设置值:good test.getBean1().setName("good"); //取得Bean1的name属性的值,结果输出:good System.out.println(""+test.getBean1().getName()); //给Bean2的age设置值:20 test.getBean2().setAge(20); //取得Bean2的age属性的值,结果输出:20 System.out.println(""+test.getBean2().getAge()); }}????
从输出中可以看到,在Test.java中正确的给Bean1和Bean2设置了name和age值。
但是在spring配置文件中,既没有指定注入关系,也没有指定按名称自动装配。
但是在配置文件中可以看到标签<beans>的一个属性:default-autowire="byType"
这就是按类型自动匹配,此时只要Test.java中的属性的名字在配置文件中有完成的路径(class选项)即可,不需要在配置文件中配置注入关系,也不需要指定被注入类的id、name,也可以把id、name都去掉,只留一个class属性。
spring就会自动根据类型匹配到。
?
spring的<bean>标签里的id和name的区别:
1、id是唯一标识,并且需遵循XML的命名规范。name可以有重复,并且不需要遵循
2、name值可以有多个,这样以","分隔:name="name1,name2"
???? 此时通过getBean("name1")和getBean("name2");返回相同的实例(Singleton的时候)
?
?