我正在SpringSource上浏览一些博客,在其中一个博客中,作者正在使用@Inject,我想他也可以使用@Autowired。
这是一段代码:
@Inject private CustomerOrderService customerOrderService;
我不知道之间的区别@Inject和@Autowired,如果有人解释他们的区别将不胜感激,什么情况下要使用哪一个?
我正在SpringSource上浏览一些博客,在其中一个博客中,作者正在使用@Inject,我想他也可以使用@Autowired。
这是一段代码:
@Inject private CustomerOrderService customerOrderService;
我不知道之间的区别@Inject和@Autowired,如果有人解释他们的区别将不胜感激,什么情况下要使用哪一个?
Answers:
假设这里是指javax.inject.Inject注释。@Inject是Java EE 6(JSR-299)中引入的Java CDI(上下文和依赖项注入)标准的一部分,更多内容。Spring选择支持@Inject与自己的@Autowired注释同义使用。
因此,为回答您的问题,@Autowired是Spring自己的注释。@Inject是称为CDI的新Java技术的一部分,该技术定义了类似于Spring的依赖项注入标准。在Spring应用程序中,这两个注释的工作方式与Spring决定除了支持自己的某些JSR-299注释一样。
@Inject将JSR(JSR-330)与CDI(JSR-299)分开。
                    @InjectJSR注释比使用@Autowiredspring DI锁定代码库更好。
                    @Inject单独使用将无法确保框架的独立性。您还需要声明可注入bean,而无需使用依赖于框架的机制(例如Spring的@Component或)application.xml,而在类级别使用@Named和@Singleton。不知道今天是否有任何Spring项目真的声明过这样的豆-我什至从未听说过任何从Spring迁移到JEE的项目...
                    这是一篇比较@Resource,@Inject和的博客文章,@Autowired似乎做得很全面。
从链接:
除了测试2和7,配置和结果相同。当我深入研究时,我确定'@Autowired'和'@Inject'注释的行为相同。这两个注释都使用'AutowiredAnnotationBeanPostProcessor'注入依赖项。'@Autowired'和'@Inject'可以互换使用来注入Spring bean。但是,“ @ Resource”注释使用“ CommonAnnotationBeanPostProcessor”来注入依赖项。即使它们使用不同的后处理器类,它们的行为也几乎相同。以下是其执行路径的摘要。
作者引用的测试2和7分别是“按字段名注入”和“尝试使用不良限定符解析bean”。
结论将为您提供所需的所有信息。
为了处理没有接线的情况,可以使用@Autowired required属性设置为的bean false。
但是,当使用时@Inject,Provider接口可与Bean一起使用,这意味着不会直接注入Bean,而是与Provider一起注入。
在Spring 3.0中,Spring提供的JSR-330的依赖注入注解支持(@Inject,@Named,@Singleton)。
关键的区别(阅读时注意春季文档之间)@Autowired和@Inject是,@Autowired有“必要”的属性,而@Inject已经没有“必要”的属性。
@Autowired(required=false)。简单来说,   “该required属性表示该属性对于自动装配不是必需的,如果该属性不能自动装配,则将其忽略。” 
                    最好一直使用@Inject。因为是java配置方法(由sun提供),这使我们的应用程序与框架无关。因此,如果您还弹奏了您的课程,那么他们将上课。
如果使用@Autowired,它将仅适用于spring,因为@Autowired是spring提供的注释。
@Autowired 注解在Spring框架中定义。
@Inject注解是标准的注解,在标准的“ Java依赖注入”(JSR-330)中定义。Spring(从3.0版开始)支持标准JSR-330中定义的依赖项注入的通用模型。(Google Guice框架和Picocontainer框架也支持此模型)。
使用with @Inject可以注入对Provider接口实现的引用   ,从而可以注入延迟的引用。
注释@Inject和@Autowired-几乎是完整的类比。除@Autowired注释外,@Inject注释还可用于自动绑定属性,方法和构造函数。
与@Autowired注释相反,@Inject注释没有required属性。因此,如果找不到依赖项,则将引发异常。
结合特性的澄清也有所不同。如果在进样的成分选择上存在歧义,@Named应添加限定词。在类似的情况下,将为@Autowired注释添加@Qualifier限定符(JSR-330定义了它自己的@Qualifier注释,并通过此限定符@Named定义了注释)。
@Inject 没有“必填”属性
除了上述内容:
@Autowiredbean 的默认范围是Singleton,而使用JSR 330 @Inject注释则类似于Spring的prototype。@Inject。@Inject。