色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:5日期:2023-08-02 09:05:59

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

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

依賴注入示例

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

示例 Service

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

 我們的 Field 擁有一項公有屬性的服務。我們可以注解該字段,Spring 將注入該服務的實例。

屬性注入

Field Controller

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

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

私有 Field Controller

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

  盡管只使用私有字段比較好,但是測試卻成了一個令人頭痛。你要么需要啟動 Spring Context,要么使用一些 Spring 實用程序來執(zhí)行依賴注入以進行測試。不是世界末日,但總的來說很煩人。  我們可以通過為私有屬性提供 setter 來改善這一點。Getter 和 Setter 通常被認為是面向對象編程中的最佳實踐。通過注解 setter 方法,指示 Spring 使用 setter 進行依賴項注入很簡單。

方法注入

Setter Controller

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

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

構造函數(shù)注入

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

Constructor Controller

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

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

最佳實踐服務接口

public interface BpService { String getHello();}

最佳實踐服務實現(xiàn)

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

使用 Project Lombok

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

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

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

Lombok Controller

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

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

以上就是Spring 依賴注入實現(xiàn)示例的詳細內容,更多關于Spring 依賴注入的資料請關注好吧啦網(wǎng)其它相關文章!

標簽: Spring
相關文章:
主站蜘蛛池模板: 精品国产一二三区 | 自拍偷拍欧美视频 | 色悠久久久久综合网伊人男男 | 韩国一级特黄清高免费大片 | 成人免费观看视频久爱网 | 国产精品一国产精品 | 在线视频一二三区2021不卡 | 国产成人夜间影院在线观看 | 精品成人毛片一区二区视 | 在线看欧美成人中文字幕视频 | se就是色94欧美setu | 综合久久91 | 爱爱客影院在线影院gf发现 | 久久久精品国产免费观看同学 | 免费看黄色片的网站 | 伊人久久网站 | 在线观看免费为成年视频 | 成年女人在线观看片免费视频 | 最新中文字幕视频 | 亚洲国产欧美视频 | 久久aa毛片免费播放嗯啊 | 九七在线视频 | 欧美性色生活片天天看99 | 性感美女视频黄.免费网站 性高湖久久久久久久久 | 欧美日韩视频二区三区 | 一区二区三区免费视频观看 | 成人毛片国产a | 成人午夜网| 普通话对白国产精品一级毛片 | 手机看片久久高清国产日韩 | 亚洲日产综合欧美一区二区 | 大量愉拍情侣在线视频 | 国产亚洲精品久久精品6 | 香港aa三级久久三级 | 亚洲国产一区在线精选 | 久污| 中文三级视频 | 亚洲免费视频一区 | 久久频这里精品香蕉久久 | 国产一级毛片免 | 九九色视频|