@Autowired 和 @Resource 的区别

@Autowired 和 @Resource 的区别
  • 相同点:

    • @Resource 作用相当于 @Autowired,均可标注在字段或属性的 setter 方法上
  • 不同点:

    • 提供方:

      • @Autowired 是由 org.springframework.beans.factory.annotation.Autowired 提供,换句话说就是由 spring 提供
      • @Resource 是由 javax.annotation.Resource 提供,即 J2EE 提供,需要 jdk1.6 及以上
    • 注入方式:

      • @Autowired 只按照 byType 注入
      • @Resource 默认按 byName 自动注入,也提供按照 byType 注入
    • 属性:

      • @Autowired 按类型装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许 null 值,可以设置 required 属性为 false;如果使用按名称装配,可以结合 @Qualifier 注解一起使用
      • @Resource 有两个中重要的属性
        • name:name 属性指定 byName,如果没有指定 name 属性,当注解标注在字段上,即默认取字段的名称作为 bean 名称寻找依赖对象,当注解标注在属性的 setter 方法上,即默认取属性名作为 bean 名称寻找依赖对象
        • type:需要注意的是,@Resource 如果没有指定 name 属性,并且按照默认的名称仍然找不到依赖对象时, @Resource 注解会回退到按类型装配,但一旦指定 name 属性,就只能按名称装配
  • 代码举例

    @Autowired
    @Resource
    private MemberService memberService;

    @Autowired: 按照 MemberService 注入 byType
    @Resource: 安装 memberService 注入 byName
    @Resource: @Resource(type = MemberService.class) byType

  • bean 的 type 相同,name 不相同

    • 如果有下面的场景,bean 的 type 是一样的,如果使用 byType 注入,就会报错

      • @Autowired:只能根据 byType 注入,但是结合 @Qualifier,可以根据 beanName 注入
      • @Resource:可以根据 byName 注入,可以使用 @Resource(name=“member1”) 注入

      @Configuration
      public class TestConfiguration {

        @Bean("member1")
        public MemberService build1() {
        	return new MemberService();
        }
      
        @Bean("member2")
        public MemberService build2() {
        	return new MemberService();
        }
      

      }

@Autowired 和 @Resource 的装配顺序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tytler

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值