我应该在DI中使用哪个批注@Resource(jsr250)或@Autowired(特定于Spring)?
@Resource(jsr250)
@Autowired
我已经成功地在过去使用两种,@Resource(name="blah")和@Autowired @Qualifier("blah")
@Resource(name="blah")
@Autowired @Qualifier("blah")
我的直觉是坚持使用该@Resource标签,因为它已被jsr人士批准。 有人对此有强烈的想法吗?
@Resource
在3.0之前的spring中,哪一个都不重要。
在Spring 3.0中,支持标准(JSR-330)注释@javax.inject.Inject-将其与结合使用@Qualifier。请注意,spring现在还支持@javax.inject.Qualifier元注释:
@javax.inject.Inject
@Qualifier
@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;
这样就减少了字符串名称的使用,因为字符串名称可能会拼写错误并且难以维护。
至于原始问题:两者都未指定注释的任何属性,而是按类型执行注入。区别在于:
@Autowired(或@Inject)和两者均@Resource能很好地工作。但是在概念上或意义上存在差异
@Inject