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

Spring(五)容器-依赖注入的三种方式

目录

 总结:通用的三种注入方式

1 字段注入

2 构造器注入

3 set注入


 总结:通用的三种注入方式

  • 优先使用构造器注入
  • 谨慎使用 Setter 注入
  • 避免滥用字段注入
  • 通过构造器传入依赖,确保对象创建时即完成初始化。
  • 通过 Setter 方法注入依赖,支持动态修改。
  • 直接通过反射注入字段,代码简洁但隐藏依赖。

1 字段注入

  • 核心思想:直接通过反射将依赖注入到字段,无需显式构造器或 Setter 方法。

  • 特点

    • 代码简洁:减少样板代码。

    • 隐藏依赖:依赖关系不透明,不利于单元测试。

    • 慎用场景:仅推荐用于快速原型开发或非核心组件。

public class ProductService {
    @Autowired
    private InventoryService inventoryService; // 直接注入字段
}

2 构造器注入

  • 核心思想:通过构造器参数传入依赖对象,确保 Bean 在实例化时即完成依赖注入。

  • 特点

    • 强制依赖:适合不可变(final)或必需依赖。

    • 线程安全:依赖在对象创建时即被赋值,避免后续修改。

    • 推荐方式:Spring 官方推荐的注入方式,尤其适用于单例 Bean。

public class OrderService {
    private final PaymentService paymentService;

    // 构造器注入(Spring 4.3+ 可省略 @Autowired)
    @Autowired
    public OrderService(PaymentService paymentService) {
        this.paymentService = paymentService;
    }
}
@RequiredArgsConstructor
public class OrderService {
    private final PaymentService paymentService;
}

3 set注入

  • 核心思想:通过 Setter 方法设置依赖对象,允许依赖在 Bean 创建后动态修改。

  • 特点

    • 可选依赖:适合非必需或可变的依赖。

    • 灵活性:允许在运行时重新注入依赖(但需注意线程安全)。

public class UserService {
    private DatabaseService databaseService;

    // Setter 方法注入
    @Autowired
    public void setDatabaseService(DatabaseService databaseService) {
        this.databaseService = databaseService;
    }
}

相关文章:

  • C语言——位操作运算
  • electron + vue3 + vite 主进程到渲染进程的单向通信
  • Gravitino源码分析-SparkConnector 实现原理
  • HTML5的新特性有哪些?
  • 网络安全配置截图 网络安全i
  • 【AI赋能】AI工具图文创造指南:从主题到一键发布的完整指南
  • 动态ip和静态ip适用于哪个场景?有何区别
  • CODEGEN:一种基于多轮对话的大型语言模型编程合成方法
  • 永洪科技深度分析实战,零售企业的销量预测
  • 隐私保护在 Facebook 用户身份验证中的应用
  • 从连接到交互:SDN 架构下 OpenFlow 协议的流程与报文剖析
  • LLM论文笔记 19: On Limitations of the Transformer Architecture
  • 【江协科技STM32】TIM编码器接口测速(学习笔记)
  • 【虚拟化】Docker Desktop 架构简介
  • SyntaxError: Illegal return statement
  • 【git】ssh配置提交 gitcode-ssh提交
  • 消防行业如何借助 TDengine 打造高效的数据监控与分析系统
  • DeepSeek-进阶版部署(Linux+GPU)
  • 随机过程的核心概念与Matlab实现
  • 乐鑫打造全球首款 PSA Certified Level 2 RISC-V 芯片
  • 电影网站如何做长尾关键词/搜外友链平台
  • 中山手机网站建设/新闻播报最新
  • 建网站免费/怎么让百度收录我的网站
  • 网站开发里程碑/软文代写兼职
  • 在线免费开网站/如何提升网站搜索排名
  • 东莞广告公司东莞网站建设价格/百度识图在线使用一下