最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

構(gòu)造注入

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

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

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

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

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

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的無(wú)參構(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 +
                '}';
    }
}

接下來(lái)在spring的配置文件中聲明需要用到的對(duì)象

<!--
    構(gòu)造注入使用<constructor-arg>標(biāo)簽
    一個(gè)<constructor-arg>標(biāo)簽表示構(gòu)造方法的一個(gè)參數(shù)
    <constructor-arg>標(biāo)簽屬性:
        name:表示構(gòu)造方法的形參名
        index:表示構(gòu)造方法中參數(shù)的位置,自左向右從0開(kāi)始
           value:構(gòu)造方法的形參類型是簡(jiǎn)單類型,使用value
        ref:構(gòu)造方法的形參類型是引用類型,使用ref
        
    下面分別使用name和index來(lái)完成構(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)備一個(gè)測(cè)試方法,測(cè)試以上程序

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

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

測(cè)試結(jié)果如下:

從輸出結(jié)果我們可以看出,構(gòu)造注入在創(chuàng)建對(duì)象時(shí)調(diào)用的是Student的有參構(gòu)造方法,因?yàn)槲覀冊(cè)趕pring配置文件中聲明了兩次Student對(duì)象,所以會(huì)調(diào)用兩次有參構(gòu)造方法。

總結(jié)

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

相關(guān)文章

  • Java實(shí)現(xiàn)讀取文件夾下(包括子目錄)所有文件的文件名

    Java實(shí)現(xiàn)讀取文件夾下(包括子目錄)所有文件的文件名

    這篇文章主要介紹了Java實(shí)現(xiàn)讀取文件夾下(包括子目錄)所有文件的文件名,本文把代碼組織成了一個(gè)模塊,可以很方便的使用,需要的朋友可以參考下
    2015-06-06
  • Spring Boot WebSocket 兩種集成方式詳解

    Spring Boot WebSocket 兩種集成方式詳解

    WebSocket 是實(shí)現(xiàn)服務(wù)器主動(dòng)推送、實(shí)時(shí)通信的利器,常見(jiàn)于聊天室、消息通知、實(shí)時(shí)監(jiān)控大屏等場(chǎng)景,本文詳細(xì)介紹了SpringBoot集成WebSocket的兩種方式,感興趣的朋友跟隨小編一起看看吧
    2026-05-05
  • JAVA 根據(jù)Url把多文件打包成ZIP下載實(shí)例

    JAVA 根據(jù)Url把多文件打包成ZIP下載實(shí)例

    這篇文章主要介紹了JAVA 根據(jù)Url把多文件打包成ZIP下載的相關(guān)資料,需要的朋友可以參考下
    2017-08-08
  • 關(guān)于MyBatis各種SQL操作詳解

    關(guān)于MyBatis各種SQL操作詳解

    這篇文章主要介紹了關(guān)于MyBatis各種SQL操作詳解,MyBatis 是一款優(yōu)秀的半自動(dòng)的ORM持久層框架,它支持自定義 SQL、存儲(chǔ)過(guò)程以及高級(jí)映射,需要的朋友可以參考下
    2023-05-05
  • Java Swing中的表格(JTable)和樹(shù)(JTree)組件使用實(shí)例

    Java Swing中的表格(JTable)和樹(shù)(JTree)組件使用實(shí)例

    這篇文章主要介紹了Java Swing中的表格(JTable)和樹(shù)(JTree)組件使用實(shí)例,本文同時(shí)講解了表格和樹(shù)的基本概念、常用方法、代碼實(shí)例,需要的朋友可以參考下
    2014-10-10
  • Kotlin開(kāi)發(fā)Android應(yīng)用實(shí)例詳解

    Kotlin開(kāi)發(fā)Android應(yīng)用實(shí)例詳解

    這篇文章主要介紹了Kotlin開(kāi)發(fā)Android應(yīng)用實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Idea里github的圖形化操作配置方法

    Idea里github的圖形化操作配置方法

    這篇文章主要介紹了Idea里github的圖形化操作配置方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • Java中實(shí)現(xiàn)文件預(yù)覽的功能(實(shí)例代碼)

    Java中實(shí)現(xiàn)文件預(yù)覽的功能(實(shí)例代碼)

    大家都知道word,Excel,PPT實(shí)現(xiàn)在線預(yù)覽常用的方式就是先轉(zhuǎn)換成pdf,然后在進(jìn)行預(yù)覽,下面給大家介紹Java中如何實(shí)現(xiàn)文件預(yù)覽的功能,需要的朋友可以參考下
    2023-05-05
  • 淺析Spring boot 中 logback 配置<springProperty> 讀取application.properties 中的屬性

    淺析Spring boot 中 logback 配置<springPropert

    這篇文章主要介紹了淺析Spring boot 中 logback 配置<springProperty> 讀取application.properties 中的屬性,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-02-02
  • Java多線程之線程安全問(wèn)題詳解

    Java多線程之線程安全問(wèn)題詳解

    Java中的多線程編程是指使用Java語(yǔ)言創(chuàng)建和控制線程的能力,這篇文章主要介紹了Java多線程之線程安全問(wèn)題的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-11-11

最新評(píng)論

闽清县| 万荣县| 商南县| 安阳县| 浦东新区| 广水市| 巩义市| 汉寿县| 吉木乃县| 娄烦县| 栾城县| 禄丰县| 富宁县| 怀远县| 庆城县| 台州市| 嫩江县| 邻水| 大丰市| 麻阳| 长治市| 牟定县| 襄垣县| 泽州县| 兴义市| 陕西省| 平谷区| 翼城县| 庄浪县| 饶河县| 南汇区| 康定县| 昌乐县| 新郑市| 尉氏县| 手游| 夏河县| 连云港市| 承德县| 乾安县| 枣阳市|