[英]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.