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

下面是这段代码:

@注入私有CustomerOrderService

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


当前回答

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

其他回答

@Inject没有'required'属性

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

但是当使用@Inject时,Provider接口与bean一起工作,这意味着bean不是直接注入的,而是与Provider一起注入的。

除上述外:

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

最好一直使用@Inject。因为它是java配置方法(由sun提供),这使得我们的应用程序对框架不可知。所以如果你spring你的类也可以工作。

如果你使用@Autowired,它将只对spring起作用,因为@Autowired是spring提供的注释。

@Inject注释是JSR-330注释集合之一。这有按类型匹配,按限定符匹配,按名称匹配执行路径。 这些执行路径对setter和字段注入都有效。@Autowired注释的行为与@Inject注释相同。唯一的区别是@Autowired注释是Spring框架的一部分。@Autowired注释也有上面的执行路径。所以我推荐@Autowired来回答你的问题。