当前位置: 首页 > article >正文

@Resource与@Autowire

@Resource与@Autowired都是Java中用于依赖注入的注解,它们在Spring/Spring Boot项目中有着广泛的应用。以下是对这两个注解的详细解析:

一、@Resource注解

  1. 来源

    • @Resource是Java EE(Jakarta EE)提供的注解,它来源于JSR-250规范提案,是Java语言规范或标准的一部分。
  2. 工作原理

    • @Resource注解主要通过名称匹配(byName)来注入依赖。如果名称匹配失败,则通过类型匹配(byType)来查找依赖。
    • 在使用@Resource注解时,可以指定name和type属性。name属性指定要注入的bean的名称,而type属性指定要注入的bean的类型。
  3. 使用场景

    • @Resource注解可以用在字段或setter方法上。
    • 当需要按照名称注入依赖时,@Resource注解是一个很好的选择。
  4. 注意事项

    • 如果使用@Resource注解注入的bean没有被提前加载(例如在Spring容器中),则会报错。
    • 在加载时,是根据类名(不包括包名)判断的,如果出现重复的类名会报异常(即使不在同一个包中也会报异常)。

二、@Autowired注解

  1. 来源

    • @Autowired注解是Spring框架提供的注解,用于自动装配bean。
  2. 工作原理

    • @Autowired注解主要通过类型匹配(byType)来注入依赖。
    • 如果Spring容器中找到一个唯一的bean与要注入的类型匹配,则直接注入该bean。
    • 如果存在多个同类型的bean,则Spring会通过字段名或参数名来进一步匹配(也称为byName匹配),或者可以使用@Primary注解来标记一个bean为主要候选者,或者使用@Qualifier注解来指定注入的bean。
  3. 使用场景

    • @Autowired注解可以用在构造器、方法、字段或参数上。
    • 在Spring框架中,依赖注入可以通过多种方式来实现,包括构造器注入、字段注入和方法注入。其中,构造器注入是推荐的方式,因为它可以确保依赖在对象创建时就被注入。
  4. 注意事项

    • 如果在Spring容器中找不到与某个依赖类型匹配的bean实例(或者找到多个但没有明确的优先级),那么Spring将抛出异常,除非将该注解的required属性设置为false。
    • 使用@Autowired注解进行字段注入时,不利于单元测试,因为依赖是通过反射注入的。因此,Spring官方已经不建议这种使用方式。

三、@Resource与@Autowired的区别

  1. 来源不同

    • @Resource是Java EE规范的一部分,适用于任何兼容的Java EE容器。
    • @Autowired是Spring框架提供的注解。
  2. 依赖查找顺序不同

    • @Resource先根据名称查找,如果找不到再根据类型查找。
    • @Autowired先根据类型查找,如果找到多个再根据名称查找。
  3. 支持的参数不同

    • @Autowired只支持设置一个required参数。
    • @Resource支持设置多个参数,包括name和type等。
  4. 依赖注入的支持不同

    • @Autowired支持属性注入、构造方法注入和Setter注入。
    • @Resource只支持属性注入和Setter注入,不支持构造方法注入。
  5. 编译器提示不同

    • 在某些IDE(如IDEA)中,使用@Autowired注入Mapper对象时可能会提示报错信息(尽管程序可以正常执行),而使用@Resource则不会出现此问题。

http://www.kler.cn/a/443803.html

相关文章:

  • CSS系列(30)-- 逻辑属性详解
  • MySQL数据库下载及安装教程
  • Windows中运行Linux(WSL)
  • 国家认可的人工智能从业人员证书如何报考?
  • JavaScript 中常见内置对象的知识点及示例总结
  • Mac 开机 一闪框 mediasharingd
  • VGGNet:深度学习中的卷积神经网络经典之作
  • Elasticsearch 实战应用:开启数据搜索与分析新征程
  • c++ 找第一个只出现一次的字符
  • 人力资本管理SaaS的升级之路:群硕以本地化+云创新驱动行业变革
  • Java聊天室系统的设计与实现【源码+文档】
  • java数据类型(补充-引用类型)
  • 整点(枚举)
  • React 19有哪些新特性?
  • WPF+MVVM案例实战与特效(四十四)- WPF多语言支持全解析:轻松实现国际化应用
  • List;Set;Map集合
  • C++总结联想文档
  • Leetcode3266:K 次乘运算后的最终数组 II
  • TanStack——为现代前端开发提供高性能和灵活的工具
  • 应用程序设置开机自启动
  • MyBatis-Plus(一)
  • 论文笔记:是什么让多模态学习变得困难?
  • Vmware 安装Ubuntu系统 服务器版本
  • 盈养科技二面
  • 3D可视化引擎HOOPS Visualize与HOOPS Luminate Bridge的功能与应用
  • 低比特语言模型 是一种利用较少比特数进行语言建模的技术