@Resource vs @Autowired

我应该在DI中使用哪个批注@Resource(jsr250)@Autowired(特定于Spring)?

我已经成功地在过去使用两种,@Resource(name="blah")@Autowired @Qualifier("blah")

我的直觉是坚持使用该@Resource标签,因为它已被jsr人士批准。

有人对此有强烈的想法吗?

回答:

在3.0之前的spring中,哪一个都不重要。

在Spring 3.0中,支持标准(JSR-330)注释@javax.inject.Inject-将其与结合使用@Qualifier。请注意,spring现在还支持@javax.inject.Qualifier元注释:

@Qualifier

@Retention(RUNTIME)

public @interface YourQualifier {}

所以你可以有

<bean class="com.pkg.SomeBean">

<qualifier type="YourQualifier"/>

</bean>

要么

@YourQualifier

@Component

public class SomeBean implements Foo { .. }

然后:

@Inject @YourQualifier private Foo foo;

这样就减少了字符串名称的使用,因为字符串名称可能会拼写错误并且难以维护。

至于原始问题:两者都未指定注释的任何属性,而是按类型执行注入。区别在于:

  • @Resource 允许你指定注入的bean的名称
  • @Autowired 允许你将其标记为非强制性。

以上是 @Resource vs @Autowired 的全部内容, 来源链接: utcz.com/qa/403344.html

回到顶部