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

下面是这段代码:

@注入私有CustomerOrderService

我不确定@Inject和@Autowired之间的区别,如果有人解释他们的区别,在什么情况下使用哪个,我会很感激的。


当前回答

@Autowired和@Inject之间的关键区别(在阅读Spring Docs时注意到)是,@Autowired有'required'属性,而@Inject没有'required'属性。

其他回答

这是一篇比较@Resource, @Inject和@Autowired的博客文章,似乎做了相当全面的工作。

从链接:

With the exception of test 2 & 7 the configuration and outcomes were identical. When I looked under the hood I determined that the ‘@Autowired’ and ‘@Inject’ annotation behave identically. Both of these annotations use the ‘AutowiredAnnotationBeanPostProcessor’ to inject dependencies. ‘@Autowired’ and ‘@Inject’ can be used interchangeable to inject Spring beans. However the ‘@Resource’ annotation uses the ‘CommonAnnotationBeanPostProcessor’ to inject dependencies. Even though they use different post processor classes they all behave nearly identically. Below is a summary of their execution paths.

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

结论应该给你所有你需要的信息。

从Spring 3.0开始,Spring提供了对JSR-330依赖注入注释(@Inject, @Named, @Singleton)的支持。

Spring文档中有一个关于它们的单独章节,包括与它们的Spring等价物的比较。

@Autowired和@Inject之间的关键区别(在阅读Spring Docs时注意到)是,@Autowired有'required'属性,而@Inject没有'required'属性。

@Inject没有'required'属性

除上述外:

@Autowired bean的默认作用域是Singleton,而使用JSR 330 @Inject注释时,它就像Spring的原型。 在JSR 330中,没有使用@Inject的@Lazy的等等物。 在JSR 330中,没有使用@Inject的@Value的等效物。