吴忠躺衫网络科技有限公司

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

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

3天內不再提示

Lombok版的構造器注入方式

科技綠洲 ? 來源:了不起 ? 作者:了不起 ? 2023-09-25 10:50 ? 次閱讀

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


問題原因

違背單一職責原則

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

依賴Spring

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

其他

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

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

其他注入方法

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

Setter注入

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

@RestController
public class DemoController {

    private DemoService demoService;

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

}

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

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

構造器

@RestController
public class DemoController {

    private DemoService demoService;

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

它的好處在于,采用了構造方法注入,這種方式對對象創建的順序會有要求,它將避免循環依賴問題。是最可靠的方法。

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

構造器簡化版(推薦)

首先,需要引入lombok依賴。

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

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

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

}

通過查看編譯結果,發現Lombok自動生成了構造方法,非常簡便。

總結

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

Setter注入構造器注入 各有優劣,需要根據實際情況選擇。

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

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

    關注

    19

    文章

    2975

    瀏覽量

    105160
  • 框架
    +關注

    關注

    0

    文章

    403

    瀏覽量

    17543
  • 代碼
    +關注

    關注

    30

    文章

    4828

    瀏覽量

    69063
  • spring
    +關注

    關注

    0

    文章

    340

    瀏覽量

    14392
收藏 人收藏

    評論

    相關推薦

    ADC的規則通道和注入通道混合使用(轉)

    DMA 請求,并將轉換的數據從 ADC_DR 寄存傳輸到用戶指定的目的地址,還有注入方式轉換后數據存儲到 ADC_DRJx寄存和規則方式
    發表于 01-19 10:40

    給AVR 單片機構造移位寄存方式的輸出函數

    給AVR 單片機構造移位寄存方式的輸出函數
    發表于 05-14 15:07 ?37次下載

    小巧的信號注入

    小巧的信號注入
    發表于 04-20 11:35 ?630次閱讀
    小巧的信號<b class='flag-5'>注入</b><b class='flag-5'>器</b>

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

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

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

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

    Lombok開發插件使用小技巧

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

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

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

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

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

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

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

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

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

    Lombok的使用

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

    Lombok如何派上用場

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

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

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

    Spring依賴注入方式

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

    Spring中依賴注入的四種方式

    詳細介紹四種常見的依賴注入方式。 第一種方式構造函數注入構造函數
    的頭像 發表于 12-03 15:11 ?2064次閱讀
    钱百家乐取胜三步曲| 百家乐大赌城| 百家乐官网开户平台| 太阳城花园| 澳门百家乐下注最低| 嬴澳门百家乐官网的公式| 中华德州扑克协会| 澳门百家乐网上娱乐场开户注册| 名仕百家乐官网的玩法技巧和规则| 若尔盖县| 大发888宫网| 宿州市| 丹东棋牌网| 百家乐全部规则| 乐百家乐彩娱乐城| 大地百家乐官网的玩法技巧和规则 | 百家乐1个人| 开店做生意的风水| 皇马百家乐官网的玩法技巧和规则| 百家乐官网扑克桌布| 泗水县| 大富豪百家乐| 大连娱网棋牌下载| 大发888游乐城| 韩国百家乐的玩法技巧和规则 | 百家乐官网tt娱乐网| 太阳城百家乐官网客户端| 五寨县| 菲律宾在线游戏| 大发888娱乐平台下| 全讯网123| 威尼斯人娱乐城导航网| 香港百家乐玩| 极速百家乐真人视讯| 百家乐庄闲赢负表| 任我赢百家乐软件中国有限公司| 海立方百家乐海立方| 百家乐最佳公式| 百家乐怎么玩能赢钱| 免费百家乐官网预测工具| 网页百家乐游戏|