Bean1.java
package com.cos.bean110321;
public class Bean1 {
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Bean2.java
package com.cos.bean110321;
public class Bean2 {
int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
applicationContext_7.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:amq="http://activemq.apache.org/schema/core" xmlns:jms="http://www.springframework.org/schema/jms"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core-5.4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-3.0.xsd" default-autowire="byType">
<bean name="test" class="com.cos.bean110321.Test"/>
<bean class="com.cos.bean110321.Bean1"/>
<bean name="asdf" class="com.cos.bean110321.Bean2"/>
</beans>
Test.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的时候)
本文介绍Spring框架中的自动装配机制,特别是default-autowire属性的作用,展示如何通过该属性实现类之间的自动绑定,无需显式配置依赖关系。
1602

被折叠的 条评论
为什么被折叠?



