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

@Resource和@Autowire

@Resource@Autowired都是Java中用于依赖注入(Dependency Injection,DI)的注解,它们在Spring框架中被广泛使用,但有一些区别,以下是详细介绍:

定义和来源

  • @Resource(资源注解):是Java标准注解(JSR-250),由Java社区提出,属于Java规范的一部分,不依赖于Spring框架。它主要通过注解的方式实现依赖注入,可以标注在字段或setter方法上。

  • @Autowired(自动装配注解):是Spring框架特有的注解,是Spring对依赖注入功能的实现方式之一,只能在Spring项目中使用。

作用

  • @Resource:默认按名称(byName)进行注入,如果找不到与名称匹配的Bean,再按类型(byType)进行注入。如果两者都找不到匹配的Bean,会抛出异常。它既可以标注在字段上,也可以标注在setter方法上。

  • @Autowired:默认按类型(byType)进行注入。如果存在多个相同类型的Bean,就根据in名称。也可以通过@Qualifier注解指定具体的Bean。它只能标注在字段、构造方法或setter方法上。

使用方式

  • @Resource

    • 字段注入

      @Resource
      private UserService userService;
    • setter方法注入

      private UserService userService;@Resource
      public void setUserService(UserService userService) {this.userService = userService;
      }
  • @Autowired

    • 字段注入

      @Autowired
      private UserService userService;
    • 构造方法注入

      @Autowired
      public SomeClass(UserService userService) {this.userService = userService;
      }
    • setter方法注入

      private UserService userService;@Autowired
      public void setUserService(UserService userService) {this.userService = userService;
      }

适用场景

  • @Resource:由于是Java标准注解,不依赖于Spring框架,因此在一些非Spring项目中,如果需要实现依赖注入功能,可以使用@Resource。另外,如果项目中同时使用了其他Java规范相关的技术,使用@Resource可以保持代码的一致性。

  • @Autowired:在Spring项目中,@Autowired是更常用的方式。它提供了更灵活的注入方式,如通过@Qualifier指定具体的Bean等。同时,Spring对@Autowired的优化和扩展也更多,例如支持构造方法注入等。

总结

  • 相同点@Resource@Autowired都可以实现依赖注入功能,都可以标注在字段或方法上。

  • 不同点@Resource是Java标准注解,按名称或类型注入;@Autowired是Spring框架的注解,按类型注入,更灵活,支持构造方法注入等。

http://www.lqws.cn/news/104473.html

相关文章:

  • Go语言学习-->编译器安装
  • python学习打卡day43
  • 前端​​HTML contenteditable 属性使用指南
  • windows安装多个版本composer
  • 燃尽图和甘特图
  • “刹车思维”:慢,是为了更快
  • 超声波粒度仪市场报告:行业现状、竞争格局与未来趋势分析
  • 【基础】Unity中Camera组件知识点
  • 49套夏日小清新计划总结日系卡通ppt模板
  • 《Effective Python》第六章 推导式和生成器——使用类替代生成器的 `throw` 方法管理迭代状态转换
  • 香橙派3B学习笔记6:基本的Bash脚本学习_UTF-8格式问题
  • 使用 Python + ExecJS 获取网易云音乐歌曲歌词
  • 红黑树与红黑树的插入——用C++实现
  • 关于list集合排序的常见方法
  • JAVA获取ES连接并查询所有数据
  • Eigen实现非线性最小二乘拟合 + Gauss-Newton算法
  • Server2003 B-1 Windows操作系统渗透
  • Java项目OOM排查
  • 华为云Flexus+DeepSeek征文|基于华为云Flexus X实例的小说转语音助手应用构建实录
  • JS对数据类型的检测
  • CppCon 2014 学习:Lightning Talk: Writing a Python Interpreter for Fun and Profit
  • Java 调用第三方接口注意事项
  • Axure设计案例:滑动拼图解锁
  • 电子电路:全面深入了解晶振的定义、作用及应用
  • WordPress 6.5版本带来的新功能
  • 接口重试的7种常用方案!
  • Eureka 高可用集群搭建实战:服务注册与发现的底层原理与避坑指南
  • C++:优先级队列
  • SOC-ESP32S3部分:28-BLE低功耗蓝牙
  • 【数学】高斯积分+伽马函数公式自用背诵笔记