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

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 對象的屬性進行初始化。初始化是由容器自動完成的,稱為注入。根據注入方式的不同,常用的有兩類:set 注入、構造注入。

set注入

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

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

簡單類型的set注入

Spring中規(guī)定基本數據類型和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);

    }

測試結果:

根據測試結果我們可以看出,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 屬性值,為引用類型屬性進行隱式自動注入(默認是不自動注入引用類型屬 性)。

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

  • byName:根據名稱自動注入
  • byType: 根據類型自動注入

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>

總結

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

相關文章

  • 微服務Springcloud之Feign的基本使用

    微服務Springcloud之Feign的基本使用

    這篇文章主要介紹了微服務Springcloud之Feign的基本使用,Spring?Cloud集成Feign并對其進行了增強,使Feign支持了Spring?MVC注解,需要的朋友可以參考下
    2023-03-03
  • @FeignClient注入找不到異常如何解決

    @FeignClient注入找不到異常如何解決

    這篇文章主要介紹了@FeignClient注入找不到異常的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • SpringCloud網關組件Gateway原理深度解析

    SpringCloud網關組件Gateway原理深度解析

    Spring Cloud Gateway是Spring Cloud微服務生態(tài)下的網關組件,一些基礎的請求預處理的邏輯可以統(tǒng)一實現(xiàn)在網關這一層,這樣業(yè)務服務只需要專注于處理業(yè)務邏輯即可,所以本文就帶大家深度解析網關組件Gateway,需要的朋友可以參考下
    2023-07-07
  • SpringBoot多環(huán)境切換的靈活配置詳細教程

    SpringBoot多環(huán)境切換的靈活配置詳細教程

    在真實項目開發(fā)的時候,一定會有多個環(huán)境,下面這篇文章主要給大家介紹了關于SpringBoot多環(huán)境切換靈活配置的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-04-04
  • Maven本地倉庫的配置以及修改默認.m2倉庫位置

    Maven本地倉庫的配置以及修改默認.m2倉庫位置

    今天小編就為大家分享一篇關于Maven本地倉庫的配置以及修改默認.m2倉庫位置的文章,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • java中的啟動命令使用

    java中的啟動命令使用

    本文詳細介紹了Java啟動參數的分類和具體用途,涵蓋了基本內存管理、元空間管理、垃圾回收、性能調優(yōu)與診斷、JavaAgent、系統(tǒng)屬性以及應用執(zhí)行等幾類參數,通過合理配置這些參數,可以顯著提升Java應用的性能、可管理性和可調試性
    2025-01-01
  • 微信公眾號支付(二)實現(xiàn)統(tǒng)一下單接口

    微信公眾號支付(二)實現(xiàn)統(tǒng)一下單接口

    本篇文章主要給大家介紹調用微信公眾支付的統(tǒng)一下單API,通過參數封裝為xml格式并發(fā)送到微信給的接口地址就可以獲得返回內容,需要的朋友可以參考下本文
    2015-09-09
  • springboot臨時文件存儲目錄配置方式

    springboot臨時文件存儲目錄配置方式

    這篇文章主要介紹了springboot臨時文件存儲目錄配置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Spring中BeanFactory?FactoryBean和ObjectFactory的三種的區(qū)別

    Spring中BeanFactory?FactoryBean和ObjectFactory的三種的區(qū)別

    關于FactoryBean?和?BeanFactory的對比文章比較多,但是對ObjectFactory的描述就比較少,今天我們對比下這三種的區(qū)別,感興趣的朋友跟隨小編一起看看吧
    2023-01-01
  • 使用Mybatis的Batch?Insert?Support?實現(xiàn)批量插入

    使用Mybatis的Batch?Insert?Support?實現(xiàn)批量插入

    這篇文章主要介紹了使用Mybatis的Batch?Insert?Support?實現(xiàn)批量插入。具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07

最新評論