天天看點

Spring5入門到實戰------6、IOC容器-Bean管理XML方式(自動裝配)

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"/>      
Spring5入門到實戰------6、IOC容器-Bean管理XML方式(自動裝配)

1.2 根據byType

byType 根據屬性類型注入。注意:注入值bean的id值和類屬性名稱可以不一樣,如果有兩個bean、會報錯、不知道比對哪個。
Spring5入門到實戰------6、IOC容器-Bean管理XML方式(自動裝配)

名稱一緻

<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會報如下錯誤
  • Spring5入門到實戰------6、IOC容器-Bean管理XML方式(自動裝配)

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

    }      

2.5 測試結果