欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring中的構(gòu)造注入

 更新時間:2023年12月01日 14:58:01   作者:舉個栗子?  
這篇文章主要介紹了Spring中的構(gòu)造注入,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

在上一篇文章中我們了解了DI的set注入,接下來我們來看一下DI實現(xiàn)的另一種方式,構(gòu)造注入。

構(gòu)造注入

構(gòu)造注入是指,在構(gòu)造調(diào)用者實例的同時,完成被調(diào)用者的實例化。

即,使用構(gòu)造器設(shè)置依賴關(guān)系。

簡單的理解就是spring調(diào)用類的有參構(gòu)造方法,在創(chuàng)建對象的同時使用構(gòu)造方法給屬性賦值。

看一下構(gòu)造注入的實現(xiàn)

首先定義School類和Student類,在Student類中創(chuàng)建School類的對象。

School類:

public class School {
    private String name;
    private String address;

    public void setName(String name) {
        this.name = name;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "School{" +
                "name='" + name + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

Student類:

public class Student {
    private String name;
    private int age;
    private School school;

    public Student() {
        System.out.println("Student的無參構(gòu)造方法");
    }

    public Student(String myName, int myAge, School mySchool){
        System.out.println("Student的有參構(gòu)造方法");
        this.name = myName;
        this.age = myAge;
        this.school = mySchool;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setSchool(School school) {
        this.school = school;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", school=" + school +
                '}';
    }
}

接下來在spring的配置文件中聲明需要用到的對象

<!--
    構(gòu)造注入使用<constructor-arg>標(biāo)簽
    一個<constructor-arg>標(biāo)簽表示構(gòu)造方法的一個參數(shù)
    <constructor-arg>標(biāo)簽屬性:
        name:表示構(gòu)造方法的形參名
        index:表示構(gòu)造方法中參數(shù)的位置,自左向右從0開始
           value:構(gòu)造方法的形參類型是簡單類型,使用value
        ref:構(gòu)造方法的形參類型是引用類型,使用ref
        
    下面分別使用name和index來完成構(gòu)造注入
-->
<!--使用name屬性-->
<bean id="myStudent1" class="com.xxx.package01.Student">
    <constructor-arg name="myName" value="張三" />
    <constructor-arg name="myAge" value="20" />
    <constructor-arg name="mySchool" ref="mySchool" />
</bean>
<!--使用index屬性-->
<bean id="myStudent2" class="com.xxx.package01.Student">
    <constructor-arg index="0" value="張三" />
    <constructor-arg index="1" value="20" />
    <constructor-arg index="2" ref="mySchool" />
</bean>

<bean id="mySchool" class="com.xxx.package01.School">
    <property name="name" value="北京大學(xué)" />
    <property name="address" value="北京" />
</bean>

準(zhǔn)備一個測試方法,測試以上程序

public class MyTest {
    @Test
    public void test01(){
        String config = "package01/applicationContext.xml";
        ApplicationContext ac = new ClassPathXmlApplicationContext(config);

        //使用myStudent1或myStudent2對象都能完成注入
        Student myStudent = (Student) ac.getBean("myStudent1");
        //Student myStudent = (Student) ac.getBean("myStudent2");
        System.out.println("Student = " + myStudent);
    }
}

測試結(jié)果如下:

從輸出結(jié)果我們可以看出,構(gòu)造注入在創(chuàng)建對象時調(diào)用的是Student的有參構(gòu)造方法,因為我們在spring配置文件中聲明了兩次Student對象,所以會調(diào)用兩次有參構(gòu)造方法。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Springboot如何配置Scheduler定時器

    Springboot如何配置Scheduler定時器

    這篇文章主要介紹了Springboot如何配置Scheduler定時器問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Java IO之包裝流詳解

    Java IO之包裝流詳解

    這篇文章主要為大家介紹了Java IO之包裝流,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • JVM?中的?returnAddress過程詳解

    JVM?中的?returnAddress過程詳解

    JVM的畢竟是個虛擬機(jī),是一種規(guī)范,雖說符合馮諾依曼的計算機(jī)設(shè)計理念,但是他并不是實體計算機(jī),所以他的組成也不是什么存儲器,控制器,運(yùn)算 器,輸入輸出設(shè)備,本文給大家介紹JVM?中的?returnAddress,感興趣的朋友一起看看吧
    2022-04-04
  • java 中 String format 和Math類實例詳解

    java 中 String format 和Math類實例詳解

    這篇文章主要介紹了java 中 String format 和Math類實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Java大文件分片上傳超詳細(xì)教程(minio版)

    Java大文件分片上傳超詳細(xì)教程(minio版)

    Minio是一個開源的分布式對象存儲系統(tǒng),它允許用戶在存儲服務(wù)上存儲和檢索數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于Java大文件分片上傳(minio版)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-08-08
  • Intellij?IDEA如何查看所有斷點

    Intellij?IDEA如何查看所有斷點

    這篇文章主要介紹了Intellij?IDEA如何查看所有斷點問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 基于Java實現(xiàn)QQ郵箱發(fā)送工具類

    基于Java實現(xiàn)QQ郵箱發(fā)送工具類

    我們在日常開發(fā)中,需要實現(xiàn)一個對郵箱的發(fā)送,今天就實現(xiàn)郵箱的發(fā)送工具類,只需要一些注冊郵箱之后的配置即可,感興趣的小伙伴可以了解下
    2023-12-12
  • idea新建springboot項目的方法

    idea新建springboot項目的方法

    這篇文章主要介紹了idea新建springboot項目的方法,文中講解非常細(xì)致,圖文并茂幫助大家更好的理解學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • 查看jdk(java開發(fā)工具包)安裝路徑的兩種方法

    查看jdk(java開發(fā)工具包)安裝路徑的兩種方法

    若已經(jīng)安裝好了jdk(java開發(fā)工具包),也配置了環(huán)境變量,事后卻忘了安裝路徑在哪,如何查看jdk安裝路徑?本文給大家介紹了兩種查看jdk(java開發(fā)工具包)安裝路徑的方法,需要的朋友可以參考下
    2023-12-12
  • Java中類的定義與實例化詳解

    Java中類的定義與實例化詳解

    這篇文章主要給大家介紹了關(guān)于Java中類的定義與實例化的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11

最新評論