国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

Lombok版的構(gòu)造器注入方式

科技綠洲 ? 來源:了不起 ? 作者:了不起 ? 2023-09-25 10:50 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

做開發(fā)的同學可能都會發(fā)現(xiàn), IDEA 在我們經(jīng)常使用的@Autowired注解上添加了警告: Field injection is not recommended, 即: 不推薦使用屬性注入。那怎么解決這個問題呢?


問題原因

違背單一職責原則

因為現(xiàn)在的業(yè)務一般都會使用很多依賴, 但擁有太多的依賴通常意味著承擔更多的責任,而這顯然違背了單一職責原則。

依賴Spring

@Autowired由 Spring 提供,而@Resource是JSR-250提供的,它是Java標準。前者會警告,而后者不警告,就是因為前者導致了應用與框架的強綁定,若是換成其他IOC框架,則不能夠成功注入了。其實對于這方面,我認為在大多數(shù)情況時是不會有什么問題的。

其他

我看到網(wǎng)絡上有一些其他方面的總結(jié),比如:因為是 ByType 注入, 因此有可能會出現(xiàn)兩個相同的類型bean,進而導致Spring裝配失敗;不能像構(gòu)造器那樣注入不可變的對象等,這類問題需要結(jié)合個人實際開發(fā)進行判斷。

對于@Autowired使用方面,它雖然是將業(yè)務代碼和框架進行了強綁定,但字段注入確實大幅簡化了代碼。能夠有效提高代碼簡潔性,讓依賴注入的事情交給IOC容器,省時省力,這也是它的優(yōu)點,我們應該在實際使用中追求平衡,否則將為了過度追求松耦合而得不償失。

其他注入方法

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

Setter注入

能夠通過懶加載的方式解決循環(huán)依賴,類中的依賴在需要用到的時候才會注入。另外,setter注入方式很靈活,注入的對象還能改變。

@RestController
public class DemoController {

    private DemoService demoService;

    /*
     * 基于set注入
     * */
    @Autowired
    public void setDemoService(DemoService demoService) {
        this.demoService = demoService;
    }

}

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

這是三種注入方式中最靈活的,這個靈活就是它的缺點。Setter注入的依賴不能保證依賴不可變。

構(gòu)造器

@RestController
public class DemoController {

    private DemoService demoService;

    /*
    * 基于構(gòu)造方法的注入
    * */
    public DemoController(DemoService demoService) {
        this.demoService = demoService;
    }
}

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

但其也有缺點,假如類中需要注入的依賴比較多,就會顯得構(gòu)造方法很臃腫,缺乏可讀性。另外,構(gòu)造器注入不能解決循環(huán)依賴問題。

構(gòu)造器簡化版(推薦)

首先,需要引入lombok依賴。

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

隨后,我們在創(chuàng)建時就可以使用@RequiredArgsConstructor注解,它將幫我們創(chuàng)建構(gòu)造器,注意,屬性必須添加 final 關鍵字。

@RestController
@RequiredArgsConstructor
public class DemoController {
    /*
     * 用@RequiredArgsConstructor注解,這個使用方式也可以應用于service層
     * */
    private final DemoService demoService;

}

通過查看編譯結(jié)果,發(fā)現(xiàn)Lombok自動生成了構(gòu)造方法,非常簡便。

總結(jié)

最不推薦使用的是 屬性注入 ,除了省力以外沒有好處。

Setter注入構(gòu)造器注入 各有優(yōu)劣,需要根據(jù)實際情況選擇。

最推薦使用 Lombok版的構(gòu)造器注入 方式,既簡單又可靠。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • JAVA
    +關注

    關注

    20

    文章

    3001

    瀏覽量

    116422
  • 框架
    +關注

    關注

    0

    文章

    404

    瀏覽量

    18422
  • 代碼
    +關注

    關注

    30

    文章

    4967

    瀏覽量

    73960
  • spring
    +關注

    關注

    0

    文章

    341

    瀏覽量

    15935
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    ADC的規(guī)則通道和注入通道混合使用(轉(zhuǎn))

    DMA 請求,并將轉(zhuǎn)換的數(shù)據(jù)從 ADC_DR 寄存傳輸?shù)接脩糁付ǖ哪康牡刂罚€有注入方式轉(zhuǎn)換后數(shù)據(jù)存儲到 ADC_DRJx寄存和規(guī)則方式
    發(fā)表于 01-19 10:40

    給AVR 單片機構(gòu)造移位寄存方式的輸出函數(shù)

    給AVR 單片機構(gòu)造移位寄存方式的輸出函數(shù)
    發(fā)表于 05-14 15:07 ?37次下載

    S注入法與電壓互感的特殊接線方式

    S注入法與電壓互感的特殊接線方式 摘 要:基于“S注入法”的選線定位保護新原理的TY系列選線定位保護已大量運行于國內(nèi)電
    發(fā)表于 07-11 16:02 ?1174次閱讀
    S<b class='flag-5'>注入</b>法與電壓互感<b class='flag-5'>器</b>的特殊接線<b class='flag-5'>方式</b>

    “S注入法”與電壓互感的特殊接線方式

    “S注入法”與電壓互感的特殊接線方式 基于“S注入法”的選線定位保護新原理的TY系列選線定位保護已大量運行于國內(nèi)電力系統(tǒng)。“S注入法”需
    發(fā)表于 07-23 09:39 ?2157次閱讀
    “S<b class='flag-5'>注入</b>法”與電壓互感<b class='flag-5'>器</b>的特殊接線<b class='flag-5'>方式</b>

    構(gòu)造函數(shù)(類)繼承的方式與實驗

    類式繼承:利用構(gòu)造函數(shù)(類)繼承的方式 類 : JS是沒有類的概念的 , 把JS中的構(gòu)造函數(shù)看做的類 舉例 function Aaa () { //父類 this .name = '小明
    發(fā)表于 11-24 15:26 ?845次閱讀

    Lombok開發(fā)插件使用小技巧

    0x01:Lombok簡介 Lombok 是一款 Java開發(fā)插件,使得 Java 開發(fā)者可以通過其定義的一些注解來消除業(yè)務工程中冗長和繁瑣的代碼,尤其對于簡單的 Java 模型對象(POJO)。在
    的頭像 發(fā)表于 06-12 18:07 ?2362次閱讀

    重演自己如何掉入Lombok的戲法陷阱

    ? https://www.ramostear.com/blog/2020/04/28/uk1860p8.html ? 如果您正在閱讀此文,想必您對Project Lombok已經(jīng)有了一段時間的了解
    的頭像 發(fā)表于 10-28 11:29 ?1549次閱讀

    Lombok同時使用@Data和@Builder的一個必須要避開的巨坑

    構(gòu)造報錯!編譯不通過。如下圖: Lombok @Data和@Builder分別單獨分析用法 Lombok使?@Data可以?成?參構(gòu)造和類
    的頭像 發(fā)表于 10-11 18:14 ?3027次閱讀

    AC/DC的基礎:變壓方式和開關方式的比較

    前文已針對采用變壓方式和開關方式AC/DC轉(zhuǎn)換,概略說明一下AC/DC轉(zhuǎn)換的工作狀況和電路,在此則是比較兩者,并整理各自的優(yōu)缺點。如果比較電路構(gòu)造,會發(fā)現(xiàn)因轉(zhuǎn)換
    發(fā)表于 02-15 16:12 ?1225次閱讀
    AC/DC的基礎:變壓<b class='flag-5'>器</b><b class='flag-5'>方式</b>和開關<b class='flag-5'>方式</b>的比較

    探討Spring框架中的屬性注入技術

    在本文中,我們深入探討了 Spring 框架中的屬性注入技術,包括 setter 注入構(gòu)造注入、注解式屬性
    的頭像 發(fā)表于 06-14 09:37 ?1648次閱讀
    探討Spring框架中的屬性<b class='flag-5'>注入</b>技術

    Lombok的使用

    在平時我們工作的時候,我們經(jīng)常會使用 toString() 方法來輸出一個對象的一些屬性信息。Lombok 給我們提供了一個自動生成 toString() 代碼的注解,可以減少代碼行數(shù),如果代碼屬性
    的頭像 發(fā)表于 09-25 14:03 ?1550次閱讀

    Lombok如何派上用場

    Java的 record 關鍵字是Java 14中引入的一個新的語義特性。record 對于創(chuàng)建小型不可變的對象非常有用。另一方面,Lombok 是一個Java庫,可以自動生成一些已知的模式為
    的頭像 發(fā)表于 10-08 15:39 ?746次閱讀

    什么是SQL注入?Java項目防止SQL注入方式

    Java項目防止SQL注入方式 這里總結(jié)4種: PreparedStatement防止SQL注入 mybatis中#{}防止SQL注入 對請求參數(shù)的敏感詞匯進行過濾 ngin
    發(fā)表于 10-16 14:26 ?3091次閱讀

    Spring依賴注入方式

    可維護性和可測試性。同時,Spring 提供了多種依賴注入方式,以滿足不同場景下的需求。本文將詳細介紹 Spring 依賴注入方式構(gòu)造
    的頭像 發(fā)表于 11-22 15:12 ?1267次閱讀

    Spring中依賴注入的四種方式

    詳細介紹四種常見的依賴注入方式。 第一種方式構(gòu)造函數(shù)注入構(gòu)造函數(shù)
    的頭像 發(fā)表于 12-03 15:11 ?3123次閱讀