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

Spring中的set注入方法

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

IoC控制反轉

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

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

依賴注入DI

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

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

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

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

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

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

Spring中DI的實現(xiàn)

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

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

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

基于XML的DI

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

set注入

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

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

簡單類型的set注入

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

聲明一個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>

寫一個測試類來測試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);

    }

測試結果:

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

引用類型的set注入

在以上代碼的基礎上,我們添加另外一個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="北京大學" />
    <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);

    }

}

測試結果:

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

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

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

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

byName方式自動注入

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

容器是通過調用者的 bean類的屬性名與配置文件的被調用者 bean 的 id 進行比較而實現(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="北京大學" />
    <property name="address" value="北京" />
</bean>

byType方式自動注入

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

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

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

<!--聲明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="北京大學" />
    <property name="address" value="北京" />
</bean>

總結

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

相關文章

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

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

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

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

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

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

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

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

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

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

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

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

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

    Java Swing JRadioButton單選按鈕具體使用

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

    SpringBoot 返回Html界面的操作代碼

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

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

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

    spring security中的默認登錄頁源碼跟蹤

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

最新評論

冀州市| 彰化县| 乌审旗| 扶绥县| 漾濞| 河池市| 朝阳县| 漳州市| 宁陕县| 五常市| 濮阳市| 米林县| 皮山县| 辽宁省| 武夷山市| 新乡市| 宜宾市| 长沙市| 泰宁县| 泊头市| 布拖县| 安顺市| 宣武区| 临朐县| 阳江市| 潼关县| 阿巴嘎旗| 莱西市| 云梦县| 永济市| 商水县| 乐昌市| 东至县| 丰顺县| 涞水县| 哈巴河县| 澳门| 滦南县| 安泽县| 木兰县| 安陆市|