1、自动装配
什么是自动装配? 根据指定装配规则(属性名称或者属性类型),Spring 自动将匹配的属性值进行注入。 bean 标签属性 autowire,配置自动装配
autowire 属性常用两个值:byName
和byType
1.1 手动装配
在xml文件中、手动引入属性值。
<bean id="emp" class="com.zyz.spring5.autowise.Emp">
<property name="dept" ref="dept"></property>
</bean>
<bean id="dept" class="com.zyz.spring5.autowise.Dept"/>
1.2 根据byName
byName 根据属性名称注入 ,注入值 bean 的 id 值和类属性名称一样。
<bean id="emp" class="com.zyz.spring5.autowise.Emp" autowire="byName"/>
<bean id="dept" class="com.zyz.spring5.autowise.Dept"/>
1.2 根据byType
byType 根据属性类型注入。注意:注入值bean的id值和类属性名称可以不一样,如果有两个bean、会报错、不知道匹配哪个。
名称一致
<bean id="emp" class="com.zyz.spring5.autowise.Emp" autowire="byType"/>
<bean id="dept" class="com.zyz.spring5.autowise.Dept"/>
名称不一致
<bean id="emp" class="com.zyz.spring5.autowise.Emp" autowire="byType"/>
<bean id="mydept" class="com.zyz.spring5.autowise.Dept"/>
- 如果有两个相同类型的bean、此时根据byType会报如下错误
2、代码
2.1 Emp.java
员工类、员工属于哪个部门。部门作为员工类的一个属性
package com.zyz.spring5.autowise;
/**
* @author Lenovo
* @version 1.0
* @data 2022/10/13 22:18
*/
public class Emp {
private Dept dept;
public Dept getDept() {
return dept;
}
public void setDept(Dept dept) {
this.dept = dept;
}
@Override
public String toString() {
return "Emp{" +
"dept=" + dept +
'}';
}
public void test(){
System.out.println(dept);
}
}
2.2 Dept.java
package com.zyz.spring5.autowise;
/**
* @author Lenovo
* @version 1.0
* @data 2022/10/13 22:18
*/
public class Dept {
@Override
public String toString() {
return "Dept{}";
}
}
2.3 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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--一般形式、手动装配-->
<!--
<bean id="emp" class="com.zyz.spring5.autowise.Emp">
<property name="dept" ref="dept"></property>
</bean>
<bean id="dept" class="com.zyz.spring5.autowise.Dept"/>
-->
<!--
bean 标签属性 autowire,配置自动装配
autowire 属性常用两个值:
byName 根据属性名称注入 ,注入值 bean 的 id 值和类属性名称一样
-->
<!--
<bean id="emp" class="com.zyz.spring5.autowise.Emp" autowire="byName"/>
<bean id="dept" class="com.zyz.spring5.autowise.Dept"/>
-->
<!--
byType 根据属性类型注入。注意:注入值bean的id值和类属性名称可以不一样,如果有两个bean、会报错、不知道匹配哪个
-->
<bean id="emp" class="com.zyz.spring5.autowise.Emp" autowire="byType"/>
<bean id="mydept" class="com.zyz.spring5.autowise.Dept"/>
</beans>
2.4 测试
@Test
public void testSpringDemo5(){
ApplicationContext context = new ClassPathXmlApplicationContext("bean5.xml");
Emp emp = context.getBean("emp", Emp.class);
System.out.println(emp);
emp.test();
}