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

Spring中的set注入方法

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

IoC控制反轉(zhuǎn)

控制反轉(zhuǎn)(IoC,Inversion of Control),是一個(gè)概念,是一種思想。指將傳統(tǒng)上由程序代碼直接操控的對象調(diào)用權(quán)交給容器,通過容器來實(shí)現(xiàn)對象的裝配和管理。

控制反轉(zhuǎn)就是對對象控制權(quán)的轉(zhuǎn)移,從程序代碼本身反轉(zhuǎn)到了外部容器,通過容器實(shí)現(xiàn)對象的創(chuàng)建,屬性賦值,依賴的管理。IoC當(dāng)前比較流行的實(shí)現(xiàn)方式是依賴注入(DI,Dependency Injection)

依賴注入DI

依賴注入DI是指程序運(yùn)行過程中,若需要調(diào)用另一個(gè)對象協(xié)助時(shí),無須在代碼中創(chuàng)建被調(diào)用者,而是依賴于外部容器,由外部容器創(chuàng)建后傳遞給程序。

Spring 的依賴注入對調(diào)用者與被調(diào)用者幾乎沒有任何要求,完全支持對象之間依賴關(guān)系的管理。

Spring 框架使用依賴注入(DI)實(shí)現(xiàn) IoC。

Spring 容器是一個(gè)超級大工廠,負(fù)責(zé)創(chuàng)建、管理所有的 Java 對象,這些 Java 對象被稱為 Bean。

Spring 容器管理著容器中 Bean 之間的依賴關(guān)系,Spring 使用“依賴注入”的方式來管理 Bean 之間的依賴關(guān)系。

使用 IoC 實(shí)現(xiàn)對象之間的解耦和。

Spring中DI的實(shí)現(xiàn)

Spring中DI的實(shí)現(xiàn)有兩種

1、在Spring配置文件中,使用標(biāo)簽和屬性實(shí)現(xiàn)DI,稱為基于XML的DI。

2、使用Spring中的注解來實(shí)現(xiàn)DI,稱為基于注解的DI

基于XML的DI

bean 實(shí)例在調(diào)用無參構(gòu)造器創(chuàng)建對象后,就要對 bean 對象的屬性進(jìn)行初始化。初始化是由容器自動完成的,稱為注入。根據(jù)注入方式的不同,常用的有兩類:set 注入、構(gòu)造注入。

set注入

set 注入也叫設(shè)值注入,是指通過 setter 方法傳入被調(diào)用者的實(shí)例。這種注入方式簡單、直觀,因而在 Spring 的依賴注入中大量使用。

根據(jù)屬性的數(shù)據(jù)類型的不同,set注入又可以分為簡單類型的set注入和引用類型的set注入。

簡單類型的set注入

Spring中規(guī)定基本數(shù)據(jù)類型和String類型都是簡單類型。

聲明一個(gè)Student類

public class Student {
    private String name;
    private int age;
    
    public void setName(String name) {
        this.name = name;
    }

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

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

在Spring的配置文件中聲明需要添加到容器中的對象

<bean id="myStudent" class="com.xxx.package01.Student">
    <!--id屬性是自定義的對象名稱,class屬性是類的全限定名稱-->
    <property name="name" value="zhangsan" />
    <property name="age" value="20" />
    <!--name是屬性名,value是屬性值-->
</bean>

寫一個(gè)測試類來測試DI

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

        Student student = (Student) ac.getBean("myStudent");
        System.out.println("Student = " + student);

    }

測試結(jié)果:

根據(jù)測試結(jié)果我們可以看出,spring通過DI將配置文件中聲明的屬性值成功賦給了容器中對象的屬性。

引用類型的set注入

在以上代碼的基礎(chǔ)上,我們添加另外一個(gè)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類,Student類的屬性中包含了引用類型school

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

    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配置文件中聲明Student對象和School對象

<!--聲明Student對象-->
<bean id="myStudent" class="com.xxx.package02.Student">
    <property name="name" value="zhangsan" />
    <property name="age" value="20" />
    <property name="school" ref="mySchool" />
    <!--name="屬性名稱" ref="引用類型的bean的id"-->
</bean>
<!--聲明School對象-->
<bean id="mySchool" class="com.xxx.package02.School">
    <property name="name" value="北京大學(xué)" />
    <property name="address" value="北京" />
</bean>

創(chuàng)建測試類

public class MyTest02 {

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

        Student myStudent = (Student) ac.getBean("myStudent");
        System.out.println("Student = " + myStudent);

    }

}

測試結(jié)果:

引用類型還可以實(shí)現(xiàn)自動注入

對于引用類型屬性的注入,也可不在配置文件中顯示的注入??梢酝ㄟ^為標(biāo)簽設(shè)置 autowire 屬性值,為引用類型屬性進(jìn)行隱式自動注入(默認(rèn)是不自動注入引用類型屬 性)。

根據(jù)自動注入判斷標(biāo)準(zhǔn)的不同,可以分為兩種:

  • byName:根據(jù)名稱自動注入
  • byType: 根據(jù)類型自動注入

byName方式自動注入

當(dāng)配置文件中被調(diào)用者 bean 的 id 值與代碼中調(diào)用者 bean 類的屬性名相同時(shí),可使用byName 方式,讓容器自動將被調(diào)用者 bean 注入給調(diào)用者 bean。

容器是通過調(diào)用者的 bean類的屬性名與配置文件的被調(diào)用者 bean 的 id 進(jìn)行比較而實(shí)現(xiàn)自動注入的。

<!--聲明Student對象-->
<bean id="myStudent" class="com.xxx.package03.Student" autowire="byName">
        <property name="name" value="zhangsan" />
        <property name="age" value="20" />
</bean>
<!--聲明School對象-->
<bean id="school" class="com.xxx.package03.School">
    <property name="name" value="北京大學(xué)" />
    <property name="address" value="北京" />
</bean>

byType方式自動注入

使用 byType 方式自動注入,要求:配置文件中被調(diào)用者 bean 的 class 屬性指定的類,要與代碼中調(diào)用者 bean 類的某引用類型屬性類型同源。

即要么相同,要么有 is-a 關(guān)系(子類,或是實(shí)現(xiàn)類)。

但這樣的同源的被調(diào)用 bean 只能有一個(gè)。多于一個(gè),容器就不知該匹配哪一個(gè)了。

<!--聲明Student對象-->
<bean id="myStudent" class="com.xxx.package03.Student" autowire="byType">
    <property name="name" value="zhangsan" />
    <property name="age" value="20" />
</bean>
<!--聲明School對象-->
<bean id="mySchool" class="com.xxx.package03.School">
    <property name="name" value="北京大學(xué)" />
    <property name="address" value="北京" />
</bean>

總結(jié)

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

相關(guān)文章

  • 使用SpringBoot整合Sharding Sphere實(shí)現(xiàn)數(shù)據(jù)脫敏的示例

    使用SpringBoot整合Sharding Sphere實(shí)現(xiàn)數(shù)據(jù)脫敏的示例

    Apache ShardingSphere數(shù)據(jù)脫敏模塊,通過SQL攔截與改寫實(shí)現(xiàn)敏感信息加密存儲,解決手動處理繁瑣及系統(tǒng)改造難題,支持Spring和Spring Boot配置,本文通過實(shí)例代碼介紹如何使用SpringBoot整合Sharding Sphere實(shí)現(xiàn)數(shù)據(jù)脫敏,感興趣的朋友一起看看吧
    2025-06-06
  • Spring的CorsFilter會失效的原因及解決方法

    Spring的CorsFilter會失效的原因及解決方法

    眾所周知CorsFilter是Spring提供的跨域過濾器,我們可能會做以下的配置,基本上就是允許任何跨域請求,我利用Spring的CorsFilter做跨域操作但是出現(xiàn)報(bào)錯,接下來小編就給大家介紹一Spring的CorsFilter會失效的原因及解決方法,需要的朋友可以參考下
    2023-09-09
  • JVM類加載器之ClassLoader的使用詳解

    JVM類加載器之ClassLoader的使用詳解

    類加載器負(fù)責(zé)讀取Java字節(jié)代碼,并轉(zhuǎn)換成java.lang.Class類的一個(gè)實(shí)例的代碼模塊。本文主要和大家聊聊JVM類加載器ClassLoader的使用,需要的可以了解一下
    2022-10-10
  • SpringBoot后臺使用EasyExcel實(shí)現(xiàn)數(shù)據(jù)報(bào)表導(dǎo)出(含模板、樣式、美化)

    SpringBoot后臺使用EasyExcel實(shí)現(xiàn)數(shù)據(jù)報(bào)表導(dǎo)出(含模板、樣式、美化)

    在企業(yè)級系統(tǒng)中,數(shù)據(jù)導(dǎo)出 Excel 是非常常見的需求,本文基于實(shí)際項(xiàng)目經(jīng)驗(yàn),分享如何使用 EasyExcel 實(shí)現(xiàn)復(fù)雜報(bào)表導(dǎo)出,包含支持按天/按小時(shí)導(dǎo)出數(shù)據(jù)、支持多 Sheet、多段寫入等,下面小編給大家詳細(xì)說說,需要的朋友可以參考下
    2025-05-05
  • 基于Listener監(jiān)聽器生命周期(詳解)

    基于Listener監(jiān)聽器生命周期(詳解)

    下面小編就為大家?guī)硪黄贚istener監(jiān)聽器生命周期(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • 使用@RequestBody傳對象參數(shù)時(shí)碰到的坑

    使用@RequestBody傳對象參數(shù)時(shí)碰到的坑

    這篇文章主要介紹了使用@RequestBody傳對象參數(shù)時(shí)碰到的坑,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java Swing JRadioButton單選按鈕具體使用

    Java Swing JRadioButton單選按鈕具體使用

    這篇文章主要介紹了Java Swing JRadioButton單選按鈕具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • SpringBoot 返回Html界面的操作代碼

    SpringBoot 返回Html界面的操作代碼

    這篇文章主要介紹了SpringBoot 返回Html界面的相關(guān)資料,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • Java編程實(shí)現(xiàn)用hash方法切割文件

    Java編程實(shí)現(xiàn)用hash方法切割文件

    這篇文章主要介紹了Java編程實(shí)現(xiàn)用hash方法切割文件,簡單介紹了hash的概念,然后分享了使用方法示例,具有一定借鑒價(jià)值,需要的朋友可以了解下。
    2017-12-12
  • spring security中的默認(rèn)登錄頁源碼跟蹤

    spring security中的默認(rèn)登錄頁源碼跟蹤

    原來Spring Security有一個(gè)默認(rèn)的WebSecurityConfigurerAdapter,發(fā)現(xiàn)其中有一個(gè)init方法,于是在這個(gè)方法打了斷點(diǎn),在應(yīng)用啟動的時(shí)候進(jìn)行跟蹤,這篇文章主要介紹了spring security之 默認(rèn)登錄頁源碼跟蹤,需要的朋友可以參考下
    2021-11-11

最新評論

鸡泽县| 杂多县| 桐城市| 铜梁县| 额尔古纳市| 密云县| 黑水县| 南皮县| 成武县| 琼结县| 石景山区| 竹山县| 东安县| 黄平县| 平度市| 大英县| 察隅县| 祁连县| 视频| 曲沃县| 涞源县| 巍山| 塔河县| 安多县| 稻城县| 合水县| 石柱| 贵阳市| 柳林县| 青海省| 新巴尔虎右旗| 霍山县| 庐江县| 昂仁县| 图们市| 宝丰县| 吉林省| 屯昌县| 房产| 洪泽县| 水富县|