Spring依赖注入@Autowired VS没有@Autowired的对象的依赖注入

时间:2019-12-17 20:08:43

标签: java spring spring-boot dependency-injection

使用@Autowired注入对象和不使用@Autowired注入对象之间的主要区别是什么? 我知道spring将初始化bean,但是它真正提供了什么?

2 个答案:

答案 0 :(得分:0)

有几种方法可以配置Spring bean和使用Spring注入依赖项。一种方法是使用构造函数注入,其中Spring bean的构造函数具有参数,这些参数是应注入的依赖项:

@Component
public class MyBean {
    private final SomeDependency something;

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

但是,从Spring 4.3开始,不再需要to use @Autowired on such a constructor(单击Spring文档的链接)。因此,您可以不用@Autowired来编写它:

@Component
public class MyBean {
    private final SomeDependency something;

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

这将与上面的代码完全相同-Spring将自动理解您希望通过构造函数注入依赖项。您可以省略@Autowired的事实只是为了方便。

所以,要回答您的问题:没有区别。

答案 1 :(得分:0)

@在某些情况下无法使用自动装配(因此注入),例如,如果您的自动装配bean由于某些异步原因而没有准备好,但是在目标bean中您想使用它,则可以使用它。

因此,在这种情况下,请不要使用注入(@Autowired),最好注入ApplicationContext,并在确切的时刻按名称或按类从那里获取bean(那里有很多可能)。

您也可以考虑将@Autowired与@Lazy注释一起使用。

相关问题