我正在 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 一起注入。