目录
1、什么是自动装配?
之前我们在做一个类装入属性时,我们都会通过在xml配置文件中,通过property标签中的name属性,指定value属性值,向类中设置值,这个值可以设置成普通类型,也可以设置成对象类型这种方式叫做 手动装配。
自动装配可以不需要property标签,不需要属性名称和属性值,Spring会帮我们自动的完成属性值的注入。
2、演示自动装配过程
自动装配一共有俩种类型, 根据属性名称注入和根据属性类型注。
bean 标签属性 autowire,配置自动装配 autowire 属性常用两个值:
byName 根据属性名称注入 ,注入值 bean 的 id 值和类属性名称一样
byType 根据属性类型注
下面进行演示byName 根据属性名称注入:
我们将用到3个类,和一个配置文件
package com.company;
public class Book {
//定义一个User类型的属性
private User user;
//set方法设置属性
public void setUser(User user) {
this.user = user;
}
加入toString方法方便查看
@Override
public String toString() {
return "Book{" +
"user=" + user +
'}';
}
public void test(){
System.out.println(user);
}
}
package com.company;
public class User {
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
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.xsd">
<!-- <bean id="user" class="com.company.User"></bean>-->
<!--<bean id="book" class="com.company.Book">
<property name="bname" value="Spring5"></property>
<property name="bauthor" value="zwz"></property>
</bean>-->
<bean id="book" class="com.company.Book" autowire="byName" > </bean> <!--根据下面注册对象名字来注入属性值-->
<bean id="user" class="com.company.User"></bean>
</beans>
package com.company;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Spring5Test {
@Test
public void testBook1(){
//加载spring配置文件
ApplicationContext context =new ClassPathXmlApplicationContext("bean1.xml");
//获取配置创建的对象
Book book=context.getBean("book",Book.class);
System.out.println(book);
}
}
结果:
下面进行演示byType 根据属性类型注入:
其余和类和上述类一样,我们只需要修改配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
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.xsd">
<!-- <bean id="user" class="com.company.User"></bean>-->
<!--<bean id="book" class="com.company.Book">
<property name="bname" value="Spring5"></property>
<property name="bauthor" value="zwz"></property>
</bean>-->
<bean id="book" class="com.company.Book" autowire="byType" > </bean> <!--根据下面注册对象类型来注入属性值-->
<bean id="user" class="com.company.User"></bean>
</beans>
结果:
需要注意的问题:
根据类型 自动装配时:相同类型的bean对象,不能定义多个,否则类型识别不出来是哪个bean注入