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

Spring 的 setter 注入可以解决某些类型的循环依赖问题

参考:https://blog.csdn.net/weixin_50055999/article/details/147493914?utm_source=miniapp_weixin

Setter 方法注入 (Setter Injection)
在类中提供一个 setter 方法,并在该方法上使用 @Autowired、@Resource 等注解。

代码示例

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class OrderService {private PaymentService paymentService;// 使用 @Autowired 进行 Setter 注入@Autowiredpublic void setPaymentService(PaymentService paymentService) {this.paymentService = paymentService;}// 也可以使用 @Resource// @Resource// public void setInventoryService(InventoryService inventoryService) {//     this.inventoryService = inventoryService;// }public void processOrder(Order order) {boolean paid = paymentService.pay(order.getAmount());if (paid) {System.out.println("Order processed successfully.");}}
}

优点:
支持循环依赖:Spring 的 setter 注入可以解决某些类型的循环依赖问题(A 依赖 B,B 依赖 A)。
依赖可变:允许在对象创建后重新设置依赖(虽然这在实践中不常见且可能带来问题)。
比字段注入更“显式”:依赖通过方法暴露出来。
便于单元测试:可以在测试中直接调用 setPaymentService(mockPaymentService) 来注入模拟对象。
缺点:
代码稍多:需要编写额外的 setter 方法。
对象可能处于不完整状态:对象可以被创建,但依赖可能还没有通过 setter 注入,如果在注入前就使用,会导致 NPE。虽然 Spring 保证在初始化完成后才暴露 Bean,但设计上不如构造函数注入“强制”。
可以被意外覆盖:setter 方法是公开的,理论上可以在运行时被多次调用,改变依赖。

http://www.dtcms.com/a/339440.html

相关文章:

  • 白光干涉 3D 表面轮廓仪的原理解析
  • 高频PCB厂家及工艺能力分析
  • proDAD VitaScene:专业视频转场特效滤镜软件
  • 算法第五十一天:图论part02(第十一章)
  • 【算法专题训练】14、链表
  • 2025年09月计算机二级Python选择题每日一练——第一期
  • 【CPP】一个CPP的Library(libXXXcore)和测试程序XXX_main的Demo
  • 【服务器】Apache Superset功能、部署与体验
  • Leetcode 深度优先搜索 (7)
  • 支持冲刺规划的敏捷开发任务分配工具推荐(附对比)
  • Flask 路由详解:构建灵活的 URL 映射系统
  • ISIS高级特性
  • 前端下载文件、压缩包
  • 【深度解析----Pycharm命令行和项目中Settings-Interpreter中安装的插件库不一致的原因以及解决办法】
  • 权重、偏置、运行均值、运行方差的概念
  • 【基础-判断】所有使用@Component修饰的自定义组件都支持onPageShow,onBackPress和onPageHide生命周期函数
  • 图形化监控用数据动态刷新方法
  • 快手Klear-Reasoner登顶8B模型榜首,GPPO算法双效强化稳定性与探索能力!
  • Linux 定时任务 + Oracle 19c 备份完整操作手册(Linux→windows server)
  • 【git】改 GitLab 远程分支名;
  • Unity高级开发:反射原理深入解析与实践指南 C#
  • Java 线程状态与线程组
  • 水闸安全综合监测系统解决方案
  • Kafka 面试题及详细答案100道(1-10)-- 基础概念与架构
  • NestJS @Inject 装饰器入门教程
  • Hugging Face 核心组件介绍
  • 大功率变速箱总成双联试验台架系统参数
  • 机器人控制基础:运动控制中的串级pid原理以及实现方案(包含代码示例)
  • C/C++ 常见笔试题与陷阱详解
  • .net core web程序如何设置redis预热?