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();
}