@Autowire和@Resource区别

介绍

@Autowire和@Resource都是Spring支持的注解方式动态装配bean。

详解

@Autowire

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

  • 如果允许依赖对象为null,需设置required属性为false,即
@Autowire(required=false)
private InjectionBean beanName;
  • 如果使用按照名称(by-name)装配,需结合@Qualifier注解使用,即
@Autowire
@Qualifier("beanName")
 private InjectionBean beanName;
  • 说明

@Autowire按照名称(by-name)装配,则
@Autowire + @qualifier("") = @Resource(name="")

@Resource

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

  • 如果没有指定name
  1. 当注解在字段上时,默认取name=字段名称装配。
  2. 当注解在setter方法上时,默认取name=属性名称装配。
  • 当按照名称(by-name)装配未匹配时,按照类型(by-type)装配。
  1. 当显示指定name属性后,只能按照名称(by-name)装配。

@Resoure装配顺序

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

对比

对比项@Autowire@Resource
注解来源Spring注解JDK注解(JSR-250标准注解,属于J2EE)
装配方式优先按类型优先按名称
属性requiredname、type
作用范围字段、setter方法、构造器字段、setter方法

说明:

作用范围在字段上,均无需在写setter方法

总结

推荐使用@Resource

  • 注解属于J2EE,减少与Spring耦合
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值