弹簧依赖注入@Autowired VS 无@Autowired对象的依赖注入



注入有@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。

最新更新