簡體   English   中英

使用注解在Spring中進行依賴注入

[英]Dependecy injection in Spring using annotations

據我所知,依賴注入的主要概念是“接口設計”的實踐,以使依賴組件彼此松散耦合。 但是,我看到許多使用Spring開發的系統-在我看來-違反了這個概念[並且Spring Container允許在語法級別上使用它。 在看到這樣的代碼/實現之后,我開始質疑我對依賴注入的了解/理解。

我經常看到組件通過其具體實現彼此自動連接,這是我的意思的一個示例:

@RestController
public class MyRestController {
    @AutoWired
    private MyServiceOne serviceOne;
    // .. rest of the code if the rest controller here ...
}
@Service
public class MyServiceOne {
    @Autowired
    private MyRepository repo;
    // rest of code of the service here
}

如您所見,“ MyServiceOne”是一個具體的類,而不是一個接口,Spring Framework可以做到這一點。 不需要在某個地方的“ @Configuration”類中提供“ @Bean”方法來注入正確的具體類類型(因為@service已經是一個具體類)。

因此,對於服務層中的任何更改/自定義(控制器中注入的依賴項),我將不得不在控制器中更改以下行:

@AutoWired
private MyServiceOne serviceOne; //change this to be another service class, or a service class that extends it

那不是聯軸器! [或者是?]我認為,如果我們要以這種方式使用Spring DI,最好不要使用它! 在應用程序內存中創建了許多Maven / Gradle依賴項和運行時對象!

我想知道,我對依賴注入如何作為一個概念/或Spring Handle Dependency Injection如何缺少理解?

感謝您的指導!

通常,使用接口是一種最佳實踐,通常應在自己的代碼中使用它(與構造函數注入而不是此字段注入一樣),但是對允許的內容過於純粹的做法會適得其反。

例如,我正在使用Amazon DynamoDB,並且需要注入DynamoDB類實例。 我真的更希望能夠注入一個接口,但是Amazon的SDK不提供一個接口,並且能夠注入該類的配置實例仍然比不注入任何接口好得多。

類似地,使用Spring Boot注入@ConfigurationProperties bean並不少見,這些bean實際上是沒有邏輯的類似結構的POJO。 在這種情況下,定義接口只是浪費時間,但是通過(具體)類型注入bean的功能非常有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM