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

Spring 依賴注入實(shí)現(xiàn)示例

 更新時間:2020年11月17日 14:10:11   作者:信碼由韁  
這篇文章主要介紹了Spring 依賴注入實(shí)現(xiàn)示例的相關(guān)資料,幫助大家更好的理解和使用spring框架,感興趣的朋友可以了解下

【注】本文譯自:https://springframework.guru/...

  在本文中,我將向你展示如何在 Spring Framework 的依賴項(xiàng)注入中使用 Project Lombok 以獲得最佳實(shí)踐。
  Spring 框架本身具有多種執(zhí)行依賴項(xiàng)注入的方式。選項(xiàng)的靈活性是 Spring 框架的優(yōu)勢。但是,并非所有的依賴項(xiàng)注入選項(xiàng)都被視為最佳實(shí)踐。有些實(shí)際上不太好。

依賴注入示例

  我提供了一些設(shè)置示例,供我們查看必須使用的各種依賴項(xiàng)注入選項(xiàng)。
  讓我們以 Spring Service 為例。就我們的目的而言,該服務(wù)具有一種返回字符串的方法。我們將使用“service”,并使用 Spring將其注入一些模擬控制器中。請記住,我們只是在探索如何使用 Spring Framework 進(jìn)行依賴項(xiàng)注入。

示例 Service

public class MyService {
  public String getHello(){
    return "Hello";
  }
}

 我們的 Field 擁有一項(xiàng)公有屬性的服務(wù)。我們可以注解該字段,Spring 將注入該服務(wù)的實(shí)例。

屬性注入

Field Controller

@Controller
public class FieldController {
  @Autowired
  MyService myService;
  public String saySomething(){
    return myService.getHello();
  }
}

  這只是一個公有屬性,沒有 setter。顯然,這不是一個好的實(shí)踐,不推薦這樣做。
  我們可以對此進(jìn)行一些改進(jìn),將該字段的訪問權(quán)限設(shè)為私有。Spring Framework 確實(shí)允許你自動裝配私有字段。你確實(shí)看到有人這樣做。Spring 將執(zhí)行一些反射魔術(shù)來執(zhí)行依賴項(xiàng)注入

私有 Field Controller

public class PrivateFieldController {
  @Autowired
  private MyService myService;
  public String saySomething(){
    return myService.getHello();
  }
}

  盡管只使用私有字段比較好,但是測試卻成了一個令人頭痛。你要么需要啟動 Spring Context,要么使用一些 Spring 實(shí)用程序來執(zhí)行依賴注入以進(jìn)行測試。不是世界末日,但總的來說很煩人。
  我們可以通過為私有屬性提供 setter 來改善這一點(diǎn)。Getter 和 Setter 通常被認(rèn)為是面向?qū)ο缶幊讨械淖罴褜?shí)踐。通過注解 setter 方法,指示 Spring 使用 setter 進(jìn)行依賴項(xiàng)注入很簡單。

方法注入

Setter Controller

@Controller
public class SetterController {
  private MyService myService;
  @Autowired
  public void setMyService(MyService myService) {
    this.myService = myService;
  }
  public String saySomething(){
    return myService.getHello();
  }
}

  這是使用私有字段時的明顯改進(jìn)。有人會抱怨這要寫太多代碼。但是實(shí)際上,自 South Park 的第一季以來,此類任務(wù)已在現(xiàn)代 IDE 中實(shí)現(xiàn)了自動化。

構(gòu)造函數(shù)注入

  下一個選項(xiàng)是使用構(gòu)造函數(shù)。到目前為止,這是我們研究過的最佳方法。 使用構(gòu)造函數(shù)設(shè)置注入的屬性時,不必提供自動裝配注釋。這是一個很好的功能,可以節(jié)省一些鍵入時間。從 Spring Framework 版本4.2開始,用于依賴項(xiàng)注入的構(gòu)造函數(shù)的注釋是可選的。

Constructor Controller

@Controller
public class ConstructorController {
  private MyService myService;
  public ConstructorController(MyService myService) {
    this.myService = myService;
  }
  public String saySomething(){
    return myService.getHello();
  }
}

  基于構(gòu)造函數(shù)的依賴注入無疑被認(rèn)為是最佳實(shí)踐。曾經(jīng)有一段時間我個人偏愛基于 setter 的注入,但是后來又轉(zhuǎn)向基于構(gòu)造函數(shù)的注入。
  我們?nèi)匀豢梢愿纳莆覀兊氖纠,F(xiàn)在有兩個主要問題。 第一,我們的服務(wù)類型是具體類型。硬類型的依賴注入不是最佳實(shí)踐。
  第二個問題是,我們要注入的屬性未聲明為final。因此,從理論上講,該類可以在實(shí)例化注入的屬性后對其進(jìn)行修改。依# 賴注入最佳實(shí)踐
  依賴項(xiàng)注入的最佳實(shí)踐是利用接口,構(gòu)造函數(shù)和 final 屬性。
  我已經(jīng)設(shè)置了“最佳實(shí)踐”服務(wù)接口,并提供了服務(wù)實(shí)現(xiàn)---使用了 Spring Service 注解。

最佳實(shí)踐服務(wù)接口

public interface BpService {
  String getHello();
}

最佳實(shí)踐服務(wù)實(shí)現(xiàn)

@Service
public class BpServiceImpl implements BpService {
  @Override
  public String getHello() {
    return "The Best Hello!";
  }
}

使用 Project Lombok

  現(xiàn)在,使用 Project Lombok 進(jìn)行依賴注入的最佳實(shí)踐的秘訣在于:

  • 聲明一個 final 屬性接口
  • 為類添加 Project Lomboc 注解 @RequiredArgsConstructor

  現(xiàn)在,Project Lombok 將為聲明為 final 的所有屬性生成一個構(gòu)造函數(shù)。Spring 會自動使用 Lombok 提供的構(gòu)造函數(shù)來自動裝配該片段。

Lombok Controller

@RequiredArgsConstructor
@Controller
public class BpFinalConstructorController {
  private final BpService bpService;
  public String saySomething(){
    return bpService.getHello();
  }
}

  這是執(zhí)行此操作的真正好方法。您的代碼保持非常干凈。使用 Spring時,通常需要多個自動裝配屬性。
  當(dāng)您需要添加另一個 bean 時,只需聲明一個 final 屬性。
  如果您重構(gòu)并且不再需要 Spring 托管的依賴項(xiàng),則只需刪除 final 屬性。
  你不再需要維護(hù)設(shè)置器或構(gòu)造函數(shù)代碼。Project Lombok 減輕了您的日常工作。
  我在日常編碼中一直使用這種技術(shù)。絕對是節(jié)省時間。并導(dǎo)致更干凈的代碼。未使用的屬性和未使用的構(gòu)造函數(shù)參數(shù)已一去不復(fù)返了。重構(gòu)現(xiàn)在不那么痛苦了!
  本文的源代碼可在GitHub 上找到。

以上就是Spring 依賴注入實(shí)現(xiàn)示例的詳細(xì)內(nèi)容,更多關(guān)于Spring 依賴注入的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 基于Spring Security前后端分離的權(quán)限控制系統(tǒng)問題

    基于Spring Security前后端分離的權(quán)限控制系統(tǒng)問題

    本文給大家分享基于Spring Security前后端分離的權(quán)限控制系統(tǒng)問題,需要了解權(quán)限如何加載,權(quán)限匹配規(guī)則和登錄的實(shí)現(xiàn)代碼,對Spring Security權(quán)限控制系統(tǒng)相關(guān)知識感興趣的朋友一起看看吧
    2021-06-06
  • spring boot Logging的配置以及使用詳解

    spring boot Logging的配置以及使用詳解

    這篇文章主要介紹了spring boot Logging的配置以及使用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • 手把手帶你掌握SpringBoot RabbitMQ延遲隊列

    手把手帶你掌握SpringBoot RabbitMQ延遲隊列

    RabbitMQ 是一個由Erlang語言開發(fā)的AMQP的開源實(shí)現(xiàn),支持多種客戶端。用于在分布式系統(tǒng)中存儲轉(zhuǎn)發(fā)消息,在易用性、擴(kuò)展性、高可用性等方面表現(xiàn)不俗,下文將帶你深入了解 RabbitMQ 延遲隊列
    2021-09-09
  • java實(shí)現(xiàn)word文檔轉(zhuǎn)pdf并添加水印的方法詳解

    java實(shí)現(xiàn)word文檔轉(zhuǎn)pdf并添加水印的方法詳解

    這篇文章主要介紹了java實(shí)現(xiàn)word文檔轉(zhuǎn)pdf并添加水印的方法,結(jié)合實(shí)例形式詳細(xì)分析了java word文檔轉(zhuǎn)PDF相關(guān)實(shí)現(xiàn)技巧與操作注意事項(xiàng),需要的朋友可以參考下
    2019-09-09
  • Java中的ReentrantLock原理解析

    Java中的ReentrantLock原理解析

    這篇文章主要介紹了Java中的ReentrantLock原理解析,ReentrantLock是Java中的一個線程同步工具,它提供了比synchronized更靈活和強(qiáng)大的功能。它是一個可重入的互斥鎖,意味著同一個線程可以多次獲取該鎖,而不會發(fā)生死鎖,需要的朋友可以參考下
    2023-11-11
  • SpringBoot整合Ehcache3的實(shí)現(xiàn)步驟

    SpringBoot整合Ehcache3的實(shí)現(xiàn)步驟

    本文主要介紹了SpringBoot整合Ehcache3的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 詳解Java并發(fā)編程之原子類

    詳解Java并發(fā)編程之原子類

    這篇文章主要為大家介紹了Java并發(fā)編程之原子類介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • hibernate查詢緩存詳細(xì)分析

    hibernate查詢緩存詳細(xì)分析

    這篇文章主要介紹了hibernate查詢緩存詳細(xì)分析,包括查詢緩存配置方法及關(guān)閉二級緩存的詳細(xì)介紹,需要的朋友參考下本文吧
    2017-09-09
  • Java類加載器之ContextClassLoader詳解

    Java類加載器之ContextClassLoader詳解

    這篇文章主要介紹了Java類加載器之ContextClassLoader詳解,ContextClassLoader是一種與線程相關(guān)的類加載器,類似ThreadLocal,每個線程對應(yīng)一個上下文類加載器,需要的朋友可以參考下
    2023-10-10
  • IDEA2020.1使用LeetCode插件運(yùn)行并調(diào)試本地樣例的方法詳解

    IDEA2020.1使用LeetCode插件運(yùn)行并調(diào)試本地樣例的方法詳解

    這篇文章主要介紹了IDEA2020.1使用LeetCode插件運(yùn)行并調(diào)試本地樣例的方法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-09-09

最新評論