依赖注入(Dependency Injection)
缩写:无
简述
由外部提供组件所依赖的协作对象,而非在内部硬编码创建的技术。利于替换实现、测试与配置;可通过构造注入、组装根或容器完成。注入解决组装,不自动解决生命周期与作用域。
使用场景
服务组装、测试替身、多环境配置。
实践与应用
// 构造时注入,而非内部 new
Service(db, clock)
// 而不是
Service() { this.db = new Db() }
注意事项
• 容器过度魔法
• 循环依赖
• 作用域错误(单例持有请求态)
关联术语
• 接口:被注入的常为抽象依赖
• 控制反转:组装责任外移的更广概念
• 测试替身:注入假实现以便单测
• 组合根:集中组装对象图的位置