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

依赖注入-@Resource和@Autowired

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

依赖注入(DI)的核心概念

  • A依赖于B:在面向对象编程中,类A需要使用类B的功能,因此A依赖于B。

  • 依赖注入(DI):通过Spring容器将B的实例注入到A中,使得A可以使用B的功能。

  • Bean:A和B都必须是Spring容器管理的对象(即Bean),Spring容器才能进行依赖注入。

简单来说,就是A依赖于B,就需要通过依赖注入将B注入A来使用。当然使用依赖注入,必须A和B都是在ioc容器里的Bean对象。

定义和来源

  • @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

    • 字段注入(最简便,但IDE会提示不建议使用字段注入)

      @Autowired
      private UserService userService;
    • 构造方法注入(官方推荐)

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

      private UserService userService;@Autowired
      public void setUserService(UserService userService) {this.userService = userService;
      }
  • lombok自动注入

@Component
@RequiredArgsConstructor
public class FlightPlansUtil {private final IFlightPlansService flightPlansService;private final TaskStatusManager taskStatusManager;
}

适用场景

  • @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/109045.html

相关文章:

  • Java并发编程实战 Day 5:线程池原理与使用
  • EMQX 社区版单机和集群部署
  • HCIP(BGP综合实验)
  • 学习STC51单片机26(芯片为STC89C52RCRC)
  • 通过阿里云 DashScope API 调用通义千问
  • 51c大模型~合集134
  • Redis缓存-数据淘汰策略
  • 6.RV1126-OPENCV 形态学基础膨胀及腐蚀
  • Spring Boot整合Druid与Dynamic-Datasource多数据源配置:从错误到完美解决
  • 推荐一款PDF压缩的工具
  • 【AI News | 20250603】每日AI进展
  • Cursor + Claude 4:海外工具网站开发变现实战案例
  • 《Spring Bean 是怎么被创建出来的?容器启动流程全景分析》
  • 网络原理1
  • C++ 中的依赖注入(Dependency Injection)
  • MySQL的备份和恢复
  • 系统思考:短期利益与长期系统影响
  • 物联网通信技术全景指南(2025)之如何挑选合适的物联网模块
  • 纯色图片生成器
  • 【Typst】1.Typst概述
  • 互联网c++开发岗位偏少,测开怎么样?
  • LEAP模型能源需求/供应预测、能源平衡表核算、空气污染物排放预测、碳排放建模预测、成本效益分析、电力系统优化
  • HCIP-Datacom Core Technology V1.0_3 OSPF基础
  • C++初赛的三讲
  • AUTOSAR CP——CanTrcv模块
  • JavaScript 字符串的常用方法有哪些?
  • Android 11以上App主动连接WIFI的完整方案
  • 机器学习——主成分分析(PCA)
  • LangChain核心之Runnable接口底层实现
  • Flowith,有一种Agent叫无限