春季框架中的@Inject和@Autowired有什么区别?在什么条件下使用哪一个?

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

下面是一段代码:

@Inject private CustomerOrderService customerOrderService;

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


答案 1

假设在这里你指的是javax.inject.Inject annotation。 是 Java EE 6 (JSR-299) 中引入的 Java CDI(Contexts and Dependency Injection) 标准的一部分,阅读更多。Spring选择支持使用注释与他们自己的注释同义。@Inject@Inject@Autowired

所以,回答你的问题,是Spring自己的注释。 是名为CDI的Java技术的一部分,该技术定义了类似于Spring的依赖注入标准。在Spring应用程序中,这两个注释的工作方式与Spring决定除了支持自己的注释之外还支持一些JSR-299注释的方式相同。@Autowired@Inject


答案 2

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

从链接:

除测试2和7外,配置和结果相同。当我查看引擎盖下时,我确定“@Autowired”和“@Inject”注释的行为相同。这两个注释都使用“AutowiredAnnotationBeanPostProcessor”来注入依赖项。“@Autowired”和“@Inject”可以互换使用,以注入春季豆。但是,“@Resource”注释使用“CommonAnNotationBeanPostProcessor”来注入依赖项。即使它们使用不同的后处理器类,它们的行为也几乎相同。以下是其执行路径的摘要。

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

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


推荐