注入有@Autowired的对象和没有注入对象的主要区别是什么? 我知道春天会初始化豆子,但它真正提供的是什么?
有几种方法可以使用 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 中您想使用它。
因此,在这种情况下不要使用 inject (@Autowired(,最好注入 ApplicationContext,并在确切的时刻按名称或类从那里获取您的 bean(那里有很多可能性(。
您也可以考虑带有@Lazy注释的@Autowired。