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

Spring中的set注入方法

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

IoC控制反轉(zhuǎn)

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

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

依賴(lài)注入DI

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

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

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

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

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

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

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

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

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

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

基于XML的DI

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

set注入

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

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

簡(jiǎn)單類(lèi)型的set注入

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

聲明一個(gè)Student類(lèi)

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的配置文件中聲明需要添加到容器中的對(duì)象

<bean id="myStudent" class="com.xxx.package01.Student">
    <!--id屬性是自定義的對(duì)象名稱(chēng),class屬性是類(lèi)的全限定名稱(chēng)-->
    <property name="name" value="zhangsan" />
    <property name="age" value="20" />
    <!--name是屬性名,value是屬性值-->
</bean>

寫(xiě)一個(gè)測(cè)試類(lèi)來(lái)測(cè)試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);

    }

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

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

引用類(lèi)型的set注入

在以上代碼的基礎(chǔ)上,我們添加另外一個(gè)School類(lèi)

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類(lèi),Student類(lèi)的屬性中包含了引用類(lèi)型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對(duì)象和School對(duì)象

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

創(chuàng)建測(cè)試類(lèi)

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);

    }

}

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

引用類(lèi)型還可以實(shí)現(xiàn)自動(dòng)注入

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

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

  • byName:根據(jù)名稱(chēng)自動(dòng)注入
  • byType: 根據(jù)類(lèi)型自動(dòng)注入

byName方式自動(dòng)注入

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

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

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

byType方式自動(dòng)注入

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

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

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

<!--聲明Student對(duì)象-->
<bean id="myStudent" class="com.xxx.package03.Student" autowire="byType">
    <property name="name" value="zhangsan" />
    <property name="age" value="20" />
</bean>
<!--聲明School對(duì)象-->
<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)文章

  • 微服務(wù)Springcloud之Feign的基本使用

    微服務(wù)Springcloud之Feign的基本使用

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

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

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

    SpringCloud網(wǎng)關(guān)組件Gateway原理深度解析

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

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

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

    Maven本地倉(cāng)庫(kù)的配置以及修改默認(rèn).m2倉(cāng)庫(kù)位置

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

    java中的啟動(dòng)命令使用

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

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

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

    springboot臨時(shí)文件存儲(chǔ)目錄配置方式

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

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

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

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

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

最新評(píng)論