@Inject和@Autowired有什么区别

时间:2011-09-27 12:01:47

标签: spring java-ee dependency-injection inversion-of-control ioc-container

我只是想知道@Inject&和@Inject之间有什么区别? @Autowired 何时使用每一个?或者他们正在做同样的事情?

如果我有一个具有范围的春豆:

@Service
@Scope("singleton")

我可以为它进行依赖注入吗?没有问题吗?

提前感谢。

4 个答案:

答案 0 :(得分:7)

据我所知,他们也这样做。 @Inject是来自javax.inject的注释,它只是依赖注入的API。在Spring中你可以使用两者,因为我认为Spring为@Inject提供了一个实现,它和Spring环境中的@Autowired一样。

Matthias Wessendorf在此发表了关于此事的博文:http://matthiaswessendorf.wordpress.com/2010/04/20/spring-3-0-and-jsr-330-part-2/

答案 1 :(得分:6)

阅读the documentation怎么样?

  

JSR 330的@Inject注释可用于代替Spring   @Autowired在下面的例子中。 @Inject没有必需的   不像Spring的@Autowired注释那样具有必需属性   指示正在注入的值是否可选的属性。这个   如果您有JSR 330 JAR,则会自动启用行为   类路径。

答案 2 :(得分:2)

我认为值得指出的是,如果你使用@Autowired,你正在创建对Spring的依赖,使用@Inject,你将能够交换另一个支持的依赖注入框架JSR 330

答案 3 :(得分:0)

首先,@ Autowired由Spring Framework定义,但@Inject来自" Dependency Injection for Java" (JSR-330)"

第二次,@ Inject没有获取必需的属性,所以如果找不到任何bean,它将失败并出现错误,但@Autowired可以带有required = false并允许可空的领域。

第三,@ Inject注释的优势在于,您可以要求@Inject注入提供者,而不是直接注入引用。 Provider接口允许延迟注入bean引用和注入bean的多个实例等。