簡體   English   中英

Spring 依賴注入@Autowired VS 依賴注入沒有@Autowired 的對象

[英]Spring dependency injection @Autowired VS dependency injection of an object without @Autowired

使用@Autowired 注入對象和不使用它注入對象的主要區別是什么? 我知道 spring 會初始化 bean,但它真正提供的是什么?

有幾種方法可以使用 Spring 配置 Spring bean 和注入依賴項。 一種方法是使用構造函數注入,其中 Spring bean 的構造函數具有參數,這些參數是應該注入的依賴項:

@Component
public class MyBean {
    private final SomeDependency something;

    @Autowired
    public MyBean(SomeDependency something) {
        this.something = something;
    }
}

但是,從 Spring 4.3 開始,不再需要在這樣的構造函數上使用@Autowired (單擊 Spring 文檔的鏈接)。 所以你可以在沒有@Autowired情況下編寫它:

@Component
public class MyBean {
    private final SomeDependency something;

    public MyBean(SomeDependency something) {
        this.something = something;
    }
}

這將與上面的代碼完全相同 - Spring 會自動理解您希望通過構造函數注入依賴項。 您可以省略@Autowired只是為了方便。

所以,回答你的問題:沒有區別。

@Autowired(因此注入)在某些情況下無法使用,例如,如果您的自動裝配 bean 由於某些異步內容而未准備好但在目標 bean 中您想使用它。

因此,在這種情況下,不要使用注入(@Autowired),最好注入 ApplicationContext 並在確切的時刻通過名稱或類從那里獲取您的 bean(那里有很多可能性)。

您也可以考慮帶有@Lazy 注釋的@Autowired。

暫無
暫無

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

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