@Resource vs @Autowired

问题:

在使用DI时,应该使用哪个注释@Resourcejsr250)或@Autowired(Spring specific)?
过去我已经成功地使用了@Resource(name="blah")@Autowired @Qualifier("blah")
我的本能是坚持使用@Resource标签,因为它已被jsr的人批准。任何人都有强烈的想法吗?

回答:

在3.0之前的春天,没关系哪一个。
在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;

这样可以减少使用可能拼写错误并且难以维护的String名称。
对于原来的问题:两者,没有指定注释的任何属性,按类型执行注入。区别是:

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

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: @Resource vs @Autowired

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

16 + = 26