@Resource与@Autowrite

● @Resource注解是javax.annotation包中的

如果某属性添加了@Resource注解,Spring也可以实现自动装配

● @Resource注解的装配机制是:先尝试根据名称进行装配(即:要求属性名称与beanName相同),如果失败,则尝试根据类型装配,如果不存在类型的Bean,则抛出NoSuchBeanDefinitionException,如果只有1个匹配类型的Bean,则装配成功,如果匹配类型的Bean超过1个,则抛出NoUniqueBeanDefinitionException

● 在开发实践中,绝大部分类型的Bean都只有1个,无论是@Autowired还是@Resource,当匹配类型的Bean有且仅有1个时,都可以成功装配,所以,在绝大部分情况下,这2个注解的装配机制的差异对于开发人员来说是无感的

● 当需要讨论@Autowired与@Resource的区别时,除了这2个注解所在的包不同、装配机制不同以外,还存在以下区别:

– @Autowired可以添加在构造方法的声明之前,@Resource不可以

– @Resource可以添加在类的声明之前(但不会装配属性的值),@Autowired不可以

– 当存在多个同类型的Bean时

– 当装配属性时,@Autowired需要通过@Qualifier指定beanName,而@Resource可以直接配置name属性以指定beanName

– 当装配方法的参数时(例如添加了@Autowired的构造方法的参数),@Autowired仍可以使用@Qualifier指定beanName,而@Resource无法解决此问题

● 综合来看,由于@Autowired是Spring框架专门定制的注解,且 @Autowired可以添加在构造方法上,相比@Resource有更多的应用场景

(虽然不一定真的需要这样用),所以,在开发实践中,当需要使用注解显式的表示自动装配时,推荐优先使用@Autowired

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值