注入和资源和自动assembly注释

@Inject@Resource@Autowired注释之间有什么区别?

我们应该什么时候使用它们?

@Inject与@Autowire与@Resource的区别?

@Autowired:注入资源的Spring注解(与@Inject和@Resource相对),即注释域或承包者接口的类。 如果我们有一个接口或子类的实现很less,我们可以使用@Qualifier批注缩小select范围,以避免模糊。 对于回退匹配,bean名称被视为默认限定符值。 虽然可以使用这个约定来通过名称来引用特定的bean,但@Autowired基本上是可选的语义限定符的types驱动注入。

@Inject:基于JSR-330(dependency injectionJava)的注释标识可注入的构造函数,方法和字段。 这个注解是Spring的@Autowired注解的一个几乎完全的替代。 所以,而不是使用特定于Spring的@Autowired注释,您可以select使用@Inject。 @Autowired和@Inject之间的区别之一是@Inject没有必需的字段,所以如果我们无法find一个合适的对象注入将失败,而@Autowired可以使用required = false,并允许空字段(只如果需要!)。 @Inject注解的好处是,不要直接注入引用,你可以要求@Inject注入一个Provider。 除此之外,Provider接口还可以延迟注入bean引用和注入bean的多个实例。 如果我们的接口或子类的实现很less,我们可以使用@Named注释缩小select范围,以避免模糊。 @Named注释和Spring的@Qualifier非常相似

@资源:基于JSR-250的注释。 @Resource与@Autowired和@Inject非常相似,但主要区别在于执行path来找出需要注入的bean。 @资源将首先按名称缩小search范围,然后按types,最后按限定符(如果按名称find匹配则忽略)。 @Autowired和@Inject将首先按types划分search范围,然后按限定符划分,最后按名称划分。

除了@Haim的回答之外,Spring和JSR-330(Java的dependency injection)注释之间的区别以及如何使用Spring的最后一部分还有很好的描述 。

 |------------|---------------|---------------|---------------|-----------------------| | | Setter/Field | Constructor | Applicable to | Matching order | | | injection | injection | type | | |------------|---------------|---------------|---------------|-----------------------| | @Resource | X | | X | Name, Type, Qualifier | |------------|---------------|---------------|---------------|-----------------------| | @Autowired | X | X | | Type, Qualifier, Name | |------------|---------------|---------------|---------------|-----------------------| | @Inject | X | X | | Type, Qualifier, Name | |------------|---------------|---------------|---------------|-----------------------|