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

使用Autowired為什么會(huì)被IDEA警告最佳修改方法

 更新時(shí)間:2023年02月17日 14:30:09   作者:趙昕彧  
這篇文章主要介紹了使用Autowired為什么會(huì)被IDEA警告,應(yīng)該怎么修改最佳,除了使用@Autowired以外,我們其實(shí)也有幾種好用的方式,使用@Resource替代@Autiwired方法是其中一種,只需要改變一個(gè)注解,這里就不展示了,需要的朋友可以參考下

問題原因

關(guān)于這個(gè)問題,其實(shí)答案相對(duì)統(tǒng)一,實(shí)際上用大白話說起來也容易理解。

1.初始化問題

先看一下Java初始化類的順序:父類的靜態(tài)字段 > 父類靜態(tài)代碼塊 > 子類靜態(tài)字段 > 子類靜態(tài)代碼塊 > 父類成員變量 > 父類構(gòu)造代碼塊 > 父類構(gòu)造器 > 子類成員變量 > 子類構(gòu)造代碼塊 > 子類構(gòu)造器。

而Autowired注入,則要排隊(duì)到子類構(gòu)造器以后了,SpringIOC并不會(huì)對(duì)依賴的bean是否為null做判斷,JVM編譯時(shí)同樣也不會(huì)有問題,但如果使用不當(dāng),運(yùn)行起來時(shí)或許會(huì)因?yàn)槌霈F(xiàn)空指針異常

2.對(duì)IOC容易依賴過強(qiáng)

@Autowired由Spring提供,而@Resource是JSR-250提供的,它是Java標(biāo)準(zhǔn)。前者會(huì)警告,而后者不警告,就是因?yàn)?strong>前者導(dǎo)致了應(yīng)用與框架的強(qiáng)綁定,若是換成其他IOC框架,則不能夠成功注入了。其實(shí)對(duì)于這方面,我認(rèn)為在大多數(shù)情況時(shí)是不會(huì)有什么問題的。

3.其他方面

我看到網(wǎng)絡(luò)上有一些其他方面的總結(jié),比如:依賴過多卻不夠明顯,違反了單一職責(zé)原則;不能像構(gòu)造器那樣注入不可變的對(duì)象等,這類問題需要結(jié)合個(gè)人實(shí)際開發(fā)進(jìn)行判斷。

對(duì)于@Autowired使用方面,它雖然是將業(yè)務(wù)代碼和框架進(jìn)行了強(qiáng)綁定,但字段注入確實(shí)大幅簡(jiǎn)化了代碼。追求完完全全的松耦合其實(shí)也過于理想化,應(yīng)該在實(shí)際使用中追求平衡,否則將為了過度追求松耦合而得不償失

其他使用方式

除了使用@Autowired以外,我們其實(shí)也有幾種好用的方式。使用@Resource替代@Autiwired方法是其中一種,只需要改變一個(gè)注解,這里就不展示了。

1.set方法

@RestController
public class TestController2 {

    ITestService testService;

    /*
     * 基于set注入
     * */
    @Autowired
    public void setTestService(ITestService iTestService) {
        this.testService = iTestService;
    }

    @GetMapping("/status2")
    public Result<?> status() {
        return testService.status();
    }
}

這種方法也使用了@Autowired注解,但是它是作用于成員變量的Setter函數(shù)上,而不是像Fied注入一樣作用于成員變量上。

2.構(gòu)造器

@RestController
public class TestController1 {

    ITestService testService;

    /*
    * 基于構(gòu)造方法的注入
    * */
    public TestController1(ITestService iTestService) {
        this.testService = iTestService;
    }

    @GetMapping("/status1")
    public Result<?> status() {
        return testService.status();
    }
}

它的好處在于,采用了構(gòu)造方法注入,這種方式對(duì)對(duì)象創(chuàng)建的順序會(huì)有要求,它將避免循環(huán)依賴問題。是最可靠的方法。

3.構(gòu)造器的簡(jiǎn)化版(推薦)
首先,需要引入lombok依賴。

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.2</version>
</dependency>

隨后,我們?cè)趧?chuàng)建時(shí)就可以使用@RequiredArgsConstructor注解,它將幫我們創(chuàng)建構(gòu)造器,final關(guān)鍵字必不可少。

@RestController
@RequiredArgsConstructor
public class TestController3 {
    /*
     * 用@RequiredArgsConstructor注解,這個(gè)使用方式也可以應(yīng)用于service層
     * */
    private final ITestService testService;


    @GetMapping("/status3")
    public Result<?> status() {
        return testService.status();
    }
}

我們?cè)谑褂眠@些創(chuàng)建方法時(shí),都可以調(diào)出IDEA的結(jié)構(gòu)(Structure)面板進(jìn)行查看,如下圖所示。

在這里插入圖片描述

可以看到,在這個(gè)類中,已經(jīng)存在我們所需要注入的內(nèi)容。

在網(wǎng)上有博主總結(jié)了一張表,但因?yàn)榈教幠芸吹?,不知原來出處是哪里?/p>

注入方式可靠性可維護(hù)性靈活性循環(huán)關(guān)系檢測(cè)性能
Field注入不可靠靈活不檢測(cè)啟動(dòng)快
構(gòu)造方法可靠不靈活檢測(cè)啟動(dòng)慢
set方法不可靠靈活不檢測(cè)啟動(dòng)快

總結(jié)

在使用中,使用構(gòu)造方法是比較可行的,加上lombok,其實(shí)也可以到達(dá)非常簡(jiǎn)便。

到此這篇關(guān)于使用Autowired為什么會(huì)被IDEA警告,應(yīng)該怎么修改最佳的文章就介紹到這了,更多相關(guān)Autowired IDEA警告內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot無法訪問/static下靜態(tài)資源的解決

    SpringBoot無法訪問/static下靜態(tài)資源的解決

    這篇文章主要介紹了SpringBoot無法訪問/static下靜態(tài)資源的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • junit4教程junit4.5官方下載

    junit4教程junit4.5官方下載

    前提:本文假設(shè)讀者已經(jīng)具有使用JUnit 4以前版本的經(jīng)驗(yàn)。
    2008-09-09
  • redis實(shí)現(xiàn)分布式鎖實(shí)例詳解

    redis實(shí)現(xiàn)分布式鎖實(shí)例詳解

    這篇文章主要為大家詳細(xì)介紹了redis實(shí)現(xiàn)分布式鎖實(shí)例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • mybatisplus中EntityWrapper的常用方法

    mybatisplus中EntityWrapper的常用方法

    這篇文章主要介紹了mybatisplus中EntityWrapper的常用方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • SpringBoot如何實(shí)現(xiàn)持久化登錄狀態(tài)獲取

    SpringBoot如何實(shí)現(xiàn)持久化登錄狀態(tài)獲取

    這篇文章主要介紹了SpringBoot 如何實(shí)現(xiàn)持久化登錄狀態(tài)獲取,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java實(shí)現(xiàn)導(dǎo)出合并Excel單元格

    Java實(shí)現(xiàn)導(dǎo)出合并Excel單元格

    隨著數(shù)據(jù)的不斷增長(zhǎng),很多時(shí)候需要將數(shù)據(jù)導(dǎo)出到Excel中進(jìn)行分析、處理和展示。本文將介紹如何使用Java實(shí)現(xiàn)Excel導(dǎo)出,并且可以合并單元格,需要的可以參考一下
    2023-04-04
  • Java中輸出字符的ASCII值實(shí)例

    Java中輸出字符的ASCII值實(shí)例

    這篇文章主要介紹了Java中輸出字符的ASCII值實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • SpringBoot項(xiàng)目中如何訪問HTML頁面

    SpringBoot項(xiàng)目中如何訪問HTML頁面

    這篇文章主要介紹了SpringBoot項(xiàng)目中如何訪問HTML頁面,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 如何解決mybatis查詢結(jié)果接收不同的問題

    如何解決mybatis查詢結(jié)果接收不同的問題

    這篇文章主要介紹了如何解決mybatis查詢結(jié)果接收不同的問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Java三種IO模型原理實(shí)例詳解

    Java三種IO模型原理實(shí)例詳解

    這篇文章主要介紹了Java三種IO模型原理實(shí)例詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05

最新評(píng)論

泰宁县| 台北县| 海晏县| 延长县| 灌阳县| 屏南县| 东阿县| 屏山县| 女性| 电白县| 林西县| 邓州市| 梁山县| 宁晋县| 襄垣县| 景泰县| 稻城县| 永寿县| 儋州市| 连南| 新邵县| 犍为县| 呼伦贝尔市| 扎兰屯市| 栾城县| 胶南市| 墨玉县| 无为县| 寻甸| 沾化县| 鹤峰县| 旬邑县| 武乡县| 南涧| 东兴市| 九龙县| 呈贡县| 泸西县| 美姑县| 内江市| 维西|