@Autowire和@Resource注解的区别

@Autowire和@Resource二者都是注解方式动态装配bean,但是二者又有所区别。

1、@Autowire

默认按照类型(by-type)装配,默认情况下要求依赖对象必须存在。

    ①如果允许依赖对象为null,需设置required属性为false,即

@Autowire(required=false)
private UserDao userDao;

   ②如果使用按照名称(by-name)装配,需结合@Qualifier注解使用,即

@Autowire
@Qualifier("userDao")
private UserDao userDao;

2、@Resource

默认按照名称(by-name)装配,名称可以通过name属性指定。

①若没有指定name

  • 当在字段上注解时,默认取name=字段名称装配。
  • 当在setter方法上注解时,默认取name=属性名称装配。

②当按照名称(by-name)装配未匹配时,按照类型(by-type)装配。

  • 当显示指定name属性后,只能按照名称(by-name)装配。

注意: @Resoure装配顺序

  • 若指定name属性,则按照名称(by-name)装配,未找到则抛异常;
  • 若指定type属性,则按照类型(by-type)装配,未找到或者找到多个则抛异常;
  • 若同时指定name和type属性,则找到唯一匹配的bean装配,未找到则抛异常;
  • 若既未指定name属性,又未指定type属性,则按照名称(by-name)装配;如果未找到,则按照类型(by-type)装配

3、二者对比

对比项 @Autowire @Resource
装配方式优先按类型优先按名称
作用范围 字段、构造器 、setter方法字段、setter方法
属性requiredname、type
注解来源Spring注解JDK
注意作用范围在字段上,均无需在写setter方法

     
   
        
        
      
 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值