@Autowired和@Resource的区别

依然范特西╮ 提交于 2020-03-12 16:44:11
  1. 虽然他们的用法都是装配bean的,但这两个注解的所属包不一样,@Autowired是属于Spring的注解,而@Resource是属于J2EE。
  2. @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来进行装配 的哦) 这两种就都可以达到我们的目的了。
  3. 总结:这样看来,其实在一般我们的spring类型的项目中,讨论使用@Autowired或@Resource完全是没有意义的,因为他们在实现结果上来说彼此完全是可以互相取代的,不管黑猫白猫能抓到老鼠的就是好猫,有些同学觉得@Resource是属于J2EE,减少spring的耦合,这样代码比较优雅,但是我个人觉得你既然都已经用spring框架了,那还谈什么减少spring的耦合,那为什么不一条路走到黑,干脆就使用spring的@Autowired,所以这种东西完全见仁见智啦
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!