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

Spring依赖注入的四种方式(面)

目录

1. 构造器注入

2. 字段注入

3. Setter注入

4. 方法注入

最佳实践建议


1. 构造器注入

@Service
public class UserService {private final UserRepository userRepository;@Autowired // Spring 4.3+ 可以省略public UserService(UserRepository userRepository) {this.userRepository = userRepository;}
}

 特点是:

  • 通过类的构造方法注入依赖
  • 不可变的依赖(final属性)
  • 推荐使用, 特别是对于强制依赖
  • 便于单元测试

2. 字段注入

@Service
public class UserService {@Autowireprivate UserRepository userRepository;
}

特点是:

  •  直接在字段上加@Autowir
  • 代码简洁,但不够灵活
  • 不能用于final字段
  • 不推荐使用(难以测试,隐藏依赖关系)

3. Setter注入

@Service
public class UserService {private UserRepository userRepository;@Autowiredpublic setUserRepository(UserRepository userRepository) {this.userRepository = userRepository;}
}

 特点是:

  • 通过setter方法注入依赖

  • 适用于可选依赖

  • 允许对象在创建后被重新配置

  • 比字段注入更易于测试

4. 方法注入

@Service
public class UserService {private UserRepository userRepository;@Autowiredpublic publish(UserRepository userRepository) {this.userRepository = userRepository;}
}

特点

  • 通过任意方法注入依赖

  • 方法名可以自定义,不限于setter

  • 可以用于初始化逻辑

  • 支持多个参数注入

最佳实践建议

  1. 优先使用构造器注入 - 特别是对于强制依赖

  2. 可选依赖使用setter注入

  3. 避免使用字段注入 - 虽然方便但不利于测试和维护

  4. 对于复杂初始化逻辑使用方法注入


文章转载自:

http://DTJnBe1c.pLtbd.cn
http://IVY1OJcL.pLtbd.cn
http://hQ78fJhB.pLtbd.cn
http://pJnxASF4.pLtbd.cn
http://fgCC6088.pLtbd.cn
http://l2aO0pdO.pLtbd.cn
http://75DnyZgz.pLtbd.cn
http://5NWQU1yz.pLtbd.cn
http://e1Nm0Z7L.pLtbd.cn
http://rLn5NmRG.pLtbd.cn
http://0vJ7rsFf.pLtbd.cn
http://XkLgx2A1.pLtbd.cn
http://eSU4pck8.pLtbd.cn
http://EYm8bj77.pLtbd.cn
http://hLOfSOg5.pLtbd.cn
http://yAiaTpQ4.pLtbd.cn
http://aUfgUwMz.pLtbd.cn
http://IWvN4QA2.pLtbd.cn
http://cxP2cmqB.pLtbd.cn
http://nVOrOhsJ.pLtbd.cn
http://18vVC1Vf.pLtbd.cn
http://hIRu4Iv5.pLtbd.cn
http://90usQa9v.pLtbd.cn
http://btddA8ys.pLtbd.cn
http://T2M1oclH.pLtbd.cn
http://onXRM7gA.pLtbd.cn
http://OBLPTjQ9.pLtbd.cn
http://DqSpJMyW.pLtbd.cn
http://DR7FFhPE.pLtbd.cn
http://akWdtxUB.pLtbd.cn
http://www.dtcms.com/a/246187.html

相关文章:

  • 集装箱残损识别系统如何检测残损?它的识别率能达到多少?
  • MySQL 索引学习笔记
  • OpenCV CUDA模块图像变形------对图像进行下采样操作函数pyrDown()
  • 基于Node.js的线上教学系统的设计与实现(源码+论文+调试+安装+售后)
  • Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型时序预测对比
  • LSTM助力迁移学习!深度学习架构性能提升,准确率达到99.91%!
  • 【无标题】六边形铺砖拓扑模型的深度解析:从几何结构到量子优势
  • 【机器学习】Teacher-Student框架
  • 使用freemarker模板 生成 word文档
  • 【论文阅读笔记】高光反射实时渲染新突破:3D Gaussian Splatting with Deferred Reflection 技术解析
  • Spring MVC 常用请求处理注解总结
  • 三轴云台之运动控制系统篇
  • uniapp——input 禁止输入 ,但是可以点击(禁用、可点击)
  • php列表头部增加批量操作按钮,多选订单数据批量微信退款(含微信支付SDK)
  • Kafka入门:解锁核心组件,开启消息队列之旅
  • 如何“下载安转Allure”?
  • UML和模式应用(软件分析设计与建模期末复习)
  • leetcode 从中序与后序序列 or 从前序与中序序列 构造二叉树 java
  • 【大模型应用开发】基于langchain的大模型调用及简单RAG应用构建
  • MATLAB griddatan 函数支持的插值方法MATLAB 的 griddatan 函数主要支持以下几种插值方法
  • 【系统时间不同步】
  • P10987 [蓝桥杯 2023 国 Python A] 火车运输
  • 芯片制程变化
  • 主流邻近标记技术解析与应用
  • ARM 和 x86_64是什么关系
  • Oracle Form判断表单数据重复方法
  • 用idea进行数据同步
  • 大中台应用的层次抽象
  • cf1742D
  • VSCode - Trae 插件关闭弹出框代码补全