Spring提供了四种自动装配的方式(Version 5.0.6.RELEASE),分别是:
- no:(默认)无自动装配。 Bean引用必须通过ref元素定义。
- byName:自动按属性名称进行调用。Spring寻找一个与需要自动调用的属性具有相同名称的bean。
byType:匹配属性类型进行装配。如果属性类型中的一个bean存在于容器中,则允许属性自动进行。如果数据类型是兼容的也会自动装配。
constructor:根据构造方法的数据类型,进行byType模式的自动装配。
使用自动装配,需要在<bean>
定义autowire
属性.
下面分别展示各种自动装配的实现:
Student.java:
package com.du.test2;
/**
* Created with IDEA
*
* @author duzhentong
* @Date 2018/6/4
* @Time 11:32
*/
public class Student {
public void say() {
System.out.println("Student say!");
}
}
User.java:
package com.du.test2;
/**
* Created with IDEA
*
* @author duzhentong
* @Date 2018/6/4
* @Time 10:54
*/
public class User {
private Student student;
public User(Student student) {
this.student = student;
}
public User() {
}
public void setStudent(Student student) {
this.student = student;
}
public void say() {
student.say();
}
}
Spring配置文件spring2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<bean id="student" class="com.du.test2.Student"/>
<!--根据属性名字实现自动装配 byName-->
<bean id="user1" class="com.du.test2.User" autowire="byName"/>
<!--根据属性类型实现自动装配 byType-->
<bean id="user2" class="com.du.test2.User" autowire="byType"/>
<!--根据构造方法现自动装配-->
<bean id="user3" class="com.du.test2.User" autowire="constructor"/>
<bean id="user4" class="com.du.test2.User" autowire="no">
<constructor-arg>
<ref bean="student"/>
</constructor-arg>
</bean>
</beans>
测试类Application.java:
package com.du.test2;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* Created with IDEA
*
* bean的自动装配
*
* @author duzhentong
* @Date 2018/6/4
* @Time 10:58
*/
public class Application {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("spring2.xml");
User user1 = (User)ac.getBean("user1");
User user2 = (User)ac.getBean("user2");
User user3 = (User)ac.getBean("user3");
User user4 = (User)ac.getBean("user4");
user1.say();
user2.say();
user3.say();
user4.say();
}
}
输出:
Student say!
Student say!
Student say!
Student say!