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

Spring依賴注入Dependency Injection的三種方式

 更新時(shí)間:2023年02月14日 09:23:06   作者:每天都要進(jìn)步一點(diǎn)點(diǎn)  
依賴注入(Dependency Injection)和控制反轉(zhuǎn)(Inversion of Control)是同一個(gè)概念。具體含義是:當(dāng)某個(gè)角色(可能是一個(gè)Java實(shí)例,調(diào)用者)需要另一個(gè)角色(另一個(gè)Java實(shí)例,被調(diào)用者)的協(xié)助時(shí),在傳統(tǒng)的程序設(shè)計(jì)過(guò)程中,通常由調(diào)用者來(lái)創(chuàng)建被調(diào)用者的實(shí)例

Spring的依賴注入,我們一般使用@Autowired注解來(lái)完成,關(guān)于依賴注入一般有三種方式:

變量注入、構(gòu)造器注入、setter方法注入,下面我們仔細(xì)分析一下三種注入方式各自的特點(diǎn)以及使用場(chǎng)景。

一、變量注入(Field Injection)

先看看怎么使用:

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;
    //...
}

使用IDEA開(kāi)發(fā)的時(shí)候,我們發(fā)現(xiàn)直接在變量上注解 @Autowired,它會(huì)有個(gè)警告提示:Field injection is not recommended。如下圖:

具體是:Field injection is not recommended

Inspection info: Spring Team recommends: "Always use constructor based dependency injection in your beans. Always use assertions for mandatory dependencies"。

意思是說(shuō)“變量依賴注入是不被建議的方式”。Spring官方建議“總是采用構(gòu)造器注入的方式建立依賴注入”。

優(yōu)點(diǎn):

  • 注入方式簡(jiǎn)單,非常簡(jiǎn)潔,沒(méi)有任何多余代碼;

弊端:

  • 注入對(duì)象不能用final修飾;
  • 可能會(huì)導(dǎo)致循環(huán)依賴,啟動(dòng)的時(shí)候不會(huì)報(bào)錯(cuò),在使用那個(gè)bean的時(shí)候才會(huì)報(bào)錯(cuò);
  • 對(duì)于IOC容器以外的環(huán)境,除了使用反射來(lái)提供它需要的依賴之外,無(wú)法復(fù)用該實(shí)現(xiàn)類。而且將一直是個(gè)潛在的隱患,因?yàn)槟悴徽{(diào)用將一直無(wú)法發(fā)現(xiàn)NullPointException的存在;

二、構(gòu)造器注入(Constructor Injection)

先看看怎么使用:

@Service
public class UserServiceImpl implements UserService {
    private final UserMapper userMapper;
    @Autowired
    public UserServiceImpl(UserMapper userMapper) {
        this.userMapper = userMapper;
    }
}

優(yōu)點(diǎn):

  • 顯式注明必須強(qiáng)制注入,通過(guò)強(qiáng)制指明依賴注入來(lái)保證這個(gè)類的運(yùn)行,防止NullPointerException;
  • 注入對(duì)象可以使用final修飾;
  • 非IOC容器環(huán)境也可使用new實(shí)例化該類的對(duì)象;
  • 避免循環(huán)依賴,如果存在循環(huán)依賴,spring項(xiàng)目啟動(dòng)的時(shí)候就會(huì)報(bào)錯(cuò);

弊端:

  • 當(dāng)你有十幾個(gè)甚至更多對(duì)象需要注入時(shí),構(gòu)造函數(shù)的代碼臃腫,看起來(lái)不太舒服;

使用 IEDA 可以在修改變量后重新使用快捷鍵生成構(gòu)造方法。

三、setter方法注入(Setter Injection)

先看看怎么使用:

@Service
public class UserServiceImpl implements UserService {
    private UserMapper userMapper;
    @Autowired
    public void setUserMapper(UserMapper userMapper) {
        this.userMapper = userMapper;
    }
}

優(yōu)點(diǎn):

  • 依賴注入中使用的依賴是可選的,選擇依賴的意思是注入的依賴是可以為 NULL;
  • 允許在類構(gòu)造完成后重新注入;

弊端:

  • 注入對(duì)象不能使用final修飾;

四、使用場(chǎng)景

  • 如果注入的屬性是必選的屬性,則通過(guò)構(gòu)造器注入;
  • 如果注入的屬性是可選的屬性,則通過(guò)setter方法注入;
  • 至于field注入,不建議使用;

到此這篇關(guān)于Spring依賴注入Dependency Injection的三種方式的文章就介紹到這了,更多相關(guān)Spring依賴注入內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中ArrayList刪除的常用操作及方法

    Java中ArrayList刪除的常用操作及方法

    ArrayList是最常用的一種java集合,在開(kāi)發(fā)中我們常常需要從ArrayList中刪除特定元素,本文主要介紹了Java中ArrayList刪除的常用操作及方法,感興趣的可以了解一下
    2023-11-11
  • tio-boot框架整合ehcache實(shí)現(xiàn)過(guò)程示例

    tio-boot框架整合ehcache實(shí)現(xiàn)過(guò)程示例

    這篇文章主要為大家介紹了tio-boot框架整合ehcache實(shí)現(xiàn)過(guò)程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Java簡(jiǎn)易登錄注冊(cè)小程序

    Java簡(jiǎn)易登錄注冊(cè)小程序

    這篇文章主要為大家詳細(xì)介紹了Java圖形界面開(kāi)發(fā),簡(jiǎn)易登錄注冊(cè)小程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • Spring整合消息隊(duì)列RabbitMQ流程

    Spring整合消息隊(duì)列RabbitMQ流程

    Spring整合RabbitMQ很容易,但是整合的目的是為了使用,那要使用RabbitMQ就要對(duì)其有一定的了解,不然容易整成一團(tuán)漿糊。因?yàn)檎f(shuō)到底,Spring只是在封裝RabbitMQ的API,讓其更容易使用而已,廢話不多說(shuō),讓我們一起整它
    2023-03-03
  • 將Swagger2文檔導(dǎo)出為HTML或markdown等格式離線閱讀解析

    將Swagger2文檔導(dǎo)出為HTML或markdown等格式離線閱讀解析

    這篇文章主要介紹了將Swagger2文檔導(dǎo)出為HTML或markdown等格式離線閱讀,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-11-11
  • nacos服務(wù)注冊(cè)服務(wù)發(fā)現(xiàn)依賴配置詳解

    nacos服務(wù)注冊(cè)服務(wù)發(fā)現(xiàn)依賴配置詳解

    這篇文章主要為大家介紹了nacos服務(wù)注冊(cè)服務(wù)發(fā)現(xiàn)依賴配置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • SpringBoot之核心依賴和自動(dòng)配置方式

    SpringBoot之核心依賴和自動(dòng)配置方式

    這篇文章主要介紹了SpringBoot之核心依賴和自動(dòng)配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • JAVA如何調(diào)用wsdl過(guò)程詳解

    JAVA如何調(diào)用wsdl過(guò)程詳解

    這篇文章主要介紹了JAVA如何調(diào)用wsdl過(guò)程詳解,文中介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • SpringBoot?Security的自定義異常處理

    SpringBoot?Security的自定義異常處理

    這篇文章主要介紹了SpringBoot?Security的自定義異常處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • MyBatisPlus-QueryWrapper多條件查詢及修改方式

    MyBatisPlus-QueryWrapper多條件查詢及修改方式

    這篇文章主要介紹了MyBatisPlus-QueryWrapper多條件查詢及修改方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06

最新評(píng)論

唐河县| 云和县| 上蔡县| 萨迦县| 康定县| 罗甸县| 界首市| 凉城县| 大足县| 佛坪县| 孝义市| 青海省| 额济纳旗| 绥化市| 盈江县| 辽宁省| 延川县| 永安市| 盐亭县| 无极县| 安化县| 商都县| 松阳县| 微山县| 井冈山市| 阿瓦提县| 芜湖市| 中阳县| 娄烦县| 临城县| 石林| 梁山县| 黎川县| 溆浦县| 含山县| 临西县| 玉门市| 灵武市| 方山县| 灵山县| 扶绥县|