中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring?Bean屬性注入的方式有哪些

發布時間:2022-06-13 11:52:13 來源:億速云 閱讀:115 作者:zzz 欄目:開發技術

這篇文章主要介紹“Spring Bean屬性注入的方式有哪些”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Spring Bean屬性注入的方式有哪些”文章能幫助大家解決問題。

屬性注入概念

Spring 屬性注入(DI依賴注入)有兩種方式:setter注入構造器注入

這個注入的屬性可以是普通屬性(基本數據類型與String等),也可以是一個引用數據類型(主要是對象),或者是一個集合(list、map、set等)

下表是屬性注入bean標簽中常用的元素

元素名稱描述
constructor-arg構造器注入。該元素的 index 屬性指定構造參數的索引(從 0 開始),type 屬性指定構造參數的類型(type也可以不寫,spring會自動識別參數的類型)
propertysetter注入。該元素的 name 屬性用于指定 Bean 類中相應的屬性名(成員變量名) 。
ref<property> 和 <constructor-arg> 的子元索,用于引用指定bean實例,即 <bean> 元素中的 id 或 name 屬性。
value<property> 和 <constractor-arg> 的子元素,用于直接指定常量值。

一、構造器注入

先來介紹下構造器注入:Spring通過調用構造方法為成員變量賦值

  • 使用構造函數實現屬性注入大致步驟如下:

  • 在類中添加一個有參構造方法,構造方法內的每一個參數代表一個需要注入的屬性;

  • 在 Spring 的配置文件中定義Bean;

  • 在 <bean> 元素內使用 <constructor-arg> 元素,對構造函數內的屬性進行賦值,Bean 的構造方法內有多少參數,就需要使用多少個 <constructor-arg> 元素。

下面通過示例介紹如何使用構造器注入

示例1

1.創建員工類Employee和部門類Dept,并添加有參構造方法(關鍵!)

/*員工類Employee*/
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;
    }
    ----省略toString方法------  
}

/*部門類Dept*/
public class Dept {
    //部門編號
    private String deptNo;
    //部門名稱
    private String deptName;
    //有參構造方法
    public Dept(String deptNo, String deptName) {
        this.deptNo = deptNo;
        this.deptName = deptName;
    }
    ----省略toString方法------
}

2.編寫spring配置文件

<!--部門類屬性注入-->
<bean id="dept" class="com.bighorn.pojo.Dept">
    <constructor-arg index="0" value="1"/>
    <constructor-arg index="1" value="后端組"/>
</bean>
<!--員工類屬性注入-->
<bean id="employee" class="com.bighorn.pojo.Employee">
    <constructor-arg index="0" value="1"/>
    <constructor-arg index="1" value="bighorn"/>
    <constructor-arg index="2" ref="dept"/>
</bean>

3.編寫運行程序

public static void main(String[] args) {
    //獲取IoC容器
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    //從容器中獲取對象
    Employee employee = context.getBean("employee", Employee.class);
    System.out.println(employee);
}

結果如下圖

Spring?Bean屬性注入的方式有哪些

注意點

spring識別有參構造方法的參數的三種形式:

1.以index識別,案例一就是如此

<bean id="dept" class="com.bighorn.pojo.Dept">
    <constructor-arg index="0" value="1"/>
    <constructor-arg index="1" value="后端組"/>
</bean>

2.以name識別,如下

<bean id="dept" class="com.bighorn.pojo.Dept">
    <constructor-arg name="deptNo" value="1"/>
    <constructor-arg name="deptName" value="后端組"/>
</bean>

3.以type識別,如下

<bean id="dept" class="com.bighorn.pojo.Dept">
    <constructor-arg type="int" value="1"/>
    <constructor-arg type="java.lang.String" value="后端組"/>
</bean>

三種形式各有各的好處和壞處。
以type識別不適合有多個參數類型相同的情況;以index形式識別,如果參數順序變了又要重改;以name形式識別,如果參數名變了也要重改。總之,都不太利于解耦

二、setter注入

下面來介紹下setter注入:Spring通過調用setter方法為成員變量賦值。

在【Spring學習筆記(二)】提到過,在 Spring 實例化 Bean 時,IoC 容器會先調用默認構造方法實例化 Bean,然后通過反射機制調用這個 Bean 的 setXxx() 方法,將屬性值注入到 Bean 中。

使用setter注入實現屬性注入大致步驟如下:

  • 在 類中提供一個默認的無參構造方法(在沒有帶參構造方法的情況下,可省略),并為所有需要注入的屬性提供一個 setter 方法

  • 在 Spring 的 XML 配置文件中定義Bean

  • 使用 <property> 元素對各個屬性進行賦值。

下面通過示例介紹如何使用setter注入方法

示例2

1.創建員工類Employee和部門類Dept,與示例一不同的是,需要添加各個成員變量的setter方法,也需要提供一個無參構造方法

/*員工類Employee*/
public class Employee {
    //員工編號
    private String empNo;
    //員工姓名
    private String empName;
    //部門信息
    private Dept dept;
    //無參構造方法,在沒有其他帶參構造方法的情況下,可以省略
    public Employee() {
    }   
    //各個屬性的setter方法
    public void setEmpNo(int empNo) {
        this.empNo = empNo;
    }
    public void setEmpName(String empName) {
        this.empName = empName;
    }
    public void setDept(Dept dept) {
        this.dept = dept;
    }
    ----省略toString方法------  
}

/*部門類Dept*/
public class Dept {
    //部門編號
    private String deptNo;
    //部門名稱
    private String deptName;
    //無參構造方法,在沒有其他帶參構造方法的情況下,可以省略
    public Dept() {
    }
    //各個屬性的setter方法
    public void setDeptNo(int deptNo) {
        this.deptNo = deptNo;
    }
    public void setDeptName(String deptName) {
        this.deptName = deptName;
    }
    ----省略toString方法------
}

2.編寫spring配置文件

<!--使用 property 元素完成屬性注入
        name: pojo類中的屬性名稱
        value: 向屬性注入的值 
     -->
<!--部門類屬性注入-->
<bean id="dept" class="com.bighorn.pojo.Dept">
    <property name="deptNo" value="2"/>
    <property name="deptName" value="前端組"/>
</bean>
<!--員工類屬性注入-->
<bean id="employee" class="com.bighorn.pojo.Employee">
    <property name="empNo" value="114514"/>
    <property name="empName" value="lzh"/>
    <property name="dept" ref="dept"/>
</bean>

3.編寫運行程序

public static void main(String[] args) {
    //獲取IoC容器
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    //從容器中獲取對象
    Employee employee = context.getBean("employee", Employee.class);
    System.out.println(employee);
}

結果如下圖

Spring?Bean屬性注入的方式有哪些

三、如何選擇注入方式

如果對象在創建的過程中必須要注入指定的參數,則可以使用構造器注入行,因為使用setter注入有概率不進行注入導致null對象出現

如果對象在創建過程中注入的參數可有可無 ,則可以使用setter注入

常用的是setter注入方式,有必要時可以兩者結合使用

關于“Spring Bean屬性注入的方式有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

青海省| 屯昌县| 达孜县| 安龙县| 黄梅县| 资兴市| 西丰县| 延长县| 杭州市| 开江县| 宜兰县| 密山市| 鹤壁市| 绵阳市| 镇原县| 滨海县| 永泰县| 宁阳县| 福建省| 岳西县| 莲花县| 临江市| 兴安盟| 逊克县| 宣化县| 永吉县| 石林| 彰化县| 东源县| 夏津县| 隆林| 蓬安县| 壶关县| 普兰县| 株洲市| 伊春市| 大荔县| 辽源市| 宜城市| 保山市| 香河县|