读书人

Spring依据类型自动装配

发布时间: 2012-08-24 10:00:20 作者: rapoo

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的时候)

?

?

读书人网 >软件架构设计

热点推荐