协慌网

登录 贡献 社区

在 Spring Framework 中 @Inject 和 @Autowired 有什么区别?在什么条件下使用哪一个?

我正在 SpringSource 上浏览一些博客,在其中一个博客中,作者使用的是@Inject ,我想他也可以使用@Autowired

这是一段代码:

@Inject private CustomerOrderService customerOrderService;

@Inject@Autowired之间的区别,如果有人解释了它们的区别,以及在什么情况下使用哪一个,我将不胜感激。

答案

假设您在这里指的是javax.inject.Inject批注。 @Inject是 Java EE 6(JSR-299)中引入的 Java CDI(上下文和依赖项注入)标准的一部分,更多内容。 Spring 选择支持与自己的@Autowired @Inject注释。

因此,为回答您的问题,@ @Autowired是 Spring 自己的注释。 @Inject是 Java 技术(称为 CDI)的一部分,该技术定义了类似于 Spring 的依赖项注入标准。在 Spring 应用程序中,这两个批注的工作方式与 Spring 决定除了支持自己的 JSR-299 批注外还支持其他方式一样。

这是一篇比较@Resource ,@ @Inject@Autowired 的博客文章,似乎做得很全面。

从链接:

除了测试 2 和 7,配置和结果相同。当我深入研究时,我确定 '@Autowired' 和 '@Inject' 注释的行为相同。这两个注释都使用'AutowiredAnnotationBeanPostProcessor' 注入依赖项。 '@Autowired' 和 '@Inject' 可以互换使用来注入 Spring bean。但是,“@ Resource” 注释使用 “CommonAnnotationBeanPostProcessor” 来注入依赖项。即使它们使用不同的后处理器类,它们的行为也几乎相同。以下是它们的执行路径的摘要。

作者引用的测试 2 和 7 分别是 “按字段名注入” 和 “尝试使用错误的限定符来解析 bean”。

结论将为您提供所需的所有信息。

要处理没有接线的情况,可以使用@Autowired required属性设置为false bean。

但是,当使用@Inject ,Provider 接口将与 Bean 一起使用,这意味着该 Bean 不会直接注入,而是与 Provider 一起注入。