1. 程式人生 > 其它 >spring——Spring 注入內部Bean——建構函式方式注入內部 Bean

spring——Spring 注入內部Bean——建構函式方式注入內部 Bean

專案依賴:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId> <artifactId>ssw</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </
properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.6</version> </dependency> </dependencies> </project
>

dept類:

package org.example;

public class Dept {


    //部門編號
    private String deptNo;


    //部門名稱
    private String deptName;


    public Dept(String deptNo, String deptName) {
        this.deptNo = deptNo;
        this.deptName = deptName;
    }


    @Override
    public String toString() {
        return "Dept{" +
                "deptNo='" + deptNo + '\'' +
                ", deptName='" + deptName + '\'' +
                '}';
    }
}

employee類:

package org.example;

public class Employee {

    //員工編號
    private String empNo;

    //員工姓名
    private String empName;

    //部門資訊
    private Dept dept;


    public Employee(String empNo, String empName, Dept dept) {
        this.empNo = empNo;
        this.empName = empName;
        this.dept = dept;
    }


    @Override
    public String toString() {
        return "Employee{" +
                "empNo='" + empNo + '\'' +
                ", empName='" + empName + '\'' +
                ", dept=" + dept +
                '}';
    }
}

bean.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
       https://www.springframework.org/schema/beans/spring-beans.xsd">


    <bean id="employee" class="org.example.Employee">
        <constructor-arg name="empNo" value="002"></constructor-arg>
        <constructor-arg name="empName" value="小李"></constructor-arg>
        <constructor-arg name="dept">
            <!--內部bean-->
            <bean class="org.example.Dept">
                <constructor-arg name="deptNo" value="005"></constructor-arg>
                <constructor-arg name="deptName" value="運維部"></constructor-arg>
            </bean>
        </constructor-arg>
    </bean>



</beans>

執行:

package org.example;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main
{
    private static final Log LOGGER = LogFactory.getLog(Main.class);

    public static void main(String[] args)
    {
        //獲取 ApplicationContext 容器
        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");

        //獲取名為 employee 的 Bean
        Employee employee = context.getBean("employee", Employee.class);

        //通過日誌列印資訊
        LOGGER.info(employee.toString());

        System.out.println(employee.toString());

    }

}

執行結果:

=======================================================================

建構函式方式注入內部 Bean

我們可以通過構造方法注入內部 Bean。此時,我們只需要在 <bean> 標籤下的 <constructor-arg> 元素中,再次使用 <bean> 元素對內部 Bean 進行定義,格式如下。

示例

下面我們就通過一個例項,演示下如何在通過構造方法的方式注入內部 Bean。

1. 參考《第一個 Spring 程式》,新建一個名為 my-spring-demo3 的 Java 專案。

2. 在 net.biancheng.c 包中,建立一個名為 Dept 的類,程式碼如下。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 package net.biancheng.c;   public class Dept {     //部門編號     private String deptNo;     //部門名稱     private String deptName;       public Dept(String deptNo, String deptName) {         this.deptNo = deptNo;         this.deptName = deptName;     }       @Override     public String toString() {         return "Dept{" +                 "deptNo='" + deptNo + '\'' +                 ", deptName='" + deptName + '\'' +                 '}';     } }

  

3. 在 net.biancheng.c 包下,建立一個名為 Employee 的類,程式碼如下。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 package net.biancheng.c;   public class Employee {     //員工編號     private String empNo;     //員工姓名     private String empName;     //部門資訊     private Dept dept;       public Employee(String empNo, String empName, Dept dept) {         this.empNo = empNo;         this.empName = empName;         this.dept = dept;     }       @Override     public String toString() {         return "Employee{" +                 "empNo='" + empNo + '\'' +                 ", empName='" + empName + '\'' +                 ", dept=" + dept +                 '}';     } }

  

4. 在 src 目錄下建立 Spring 配置檔案 Beans.xml,配置如下。

5. 在 net.biancheng.c 包下,建立一個名為 MainApp 的類,程式碼如下。