- 虽然他们的用法都是装配bean的,但这两个注解的所属包不一样,@Autowired是属于Spring的注解,而@Resource是属于J2EE。
- @Resource默认按照名称方式进行bean匹配,@Autowired默认按照类型方式进行bean匹配(如果存在类型的多个实例就尝试使用byName匹配)。举个例子,现在有一个A接口类,有B和C两个实现类,我们需要引用到B类,首先按照面向接口的编程思想,我们注入的bean一定是A(当然直接注入B或C也是可以的,而且这样还不用纠结是按类型还是按名称来装配,但是按照面向接口的编程思想,这样就不美了),那么使用@Resource(name = "b") A a 或者 @Autowired @Qualifier(“b”) A a(@Autowired A b,这样也是可以让其使用 byName来进行装配 的哦) 这两种就都可以达到我们的目的了。
- 总结:这样看来,其实在一般我们的spring类型的项目中,讨论使用@Autowired或@Resource完全是没有意义的,因为他们在实现结果上来说彼此完全是可以互相取代的,不管黑猫白猫能抓到老鼠的就是好猫,有些同学觉得@Resource是属于J2EE,减少spring的耦合,这样代码比较优雅,但是我个人觉得你既然都已经用spring框架了,那还谈什么减少spring的耦合,那为什么不一条路走到黑,干脆就使用spring的@Autowired,所以这种东西完全见仁见智啦
来源:oschina
链接:https://my.oschina.net/u/4247262/blog/3192606