繁体   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