栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

@Autowired 和 @Resource 的区别

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

@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 的装配顺序
  • @Autowired 装配顺序

  • Resource 装配

    • 同时指定 name 和 type

    • 指定 name

    • 指定 type

    • 没指定 name,也没指定 type

    参考地址:
    • https://www.zhihu.com/question/39356740/answer/1907479772
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1039176.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号