中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用Spring 如何實現注入依賴

發布時間:2020-11-18 14:56:24 來源:億速云 閱讀:160 作者:Leah 欄目:開發技術

這篇文章將為大家詳細講解有關使用Spring 如何實現注入依賴,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

示例 Service

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

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

屬性注入

Field Controller

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

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

私有 Field Controller

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

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

方法注入

Setter Controller

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

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

構造函數注入

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

Constructor Controller

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

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

最佳實踐服務接口

public interface BpService {
  String getHello();
}

最佳實踐服務實現

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

使用 Project Lombok

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

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

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

Lombok Controller

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

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

關于使用Spring 如何實現注入依賴就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阿合奇县| 通城县| 江西省| 宁强县| 阿克陶县| 会东县| 普格县| 漳州市| 专栏| 苍溪县| 滁州市| 吴旗县| 内黄县| 乌拉特中旗| 滕州市| 镇雄县| 泾川县| 资阳市| 曲松县| 柞水县| 马公市| 昌平区| 彰武县| 阳城县| 井陉县| 堆龙德庆县| 延长县| 武冈市| 连云港市| 湖口县| 通河县| 和硕县| 夹江县| 永新县| 山阳县| 佛坪县| 获嘉县| 湾仔区| 桦川县| 阳西县| 商南县|