首页/开发/系统分析与架构设计速查/依赖注入与控制反转
架构风格与模式58 条

依赖注入与控制反转

依赖注入把依赖的创建与使用分离:对象声明所需依赖,由外部(容器或组合根)注入;它是实现依赖倒置原则的常用手段,利于测试与替换实现。

注入方式构造器注入(推荐)、方法注入、属性注入
生命周期单例、作用域、瞬态,错误组合会引发状态串扰或性能问题
组合根应用启动处集中装配依赖

构造器注入示例

构造器注入示例
class OrderService {
  private final OrderRepository repo;
  OrderService(OrderRepository repo) {   // 组合根装配
    this.repo = repo;
  }
}
// 测试:new OrderService(new InMemoryRepo())
依赖注入不等于必须使用容器:小型项目在组合根手工装配更直观可控。

易错点

  • 服务定位器到处取依赖,隐藏真实依赖关系
  • 把可变请求状态注入单例对象,出现跨请求数据串扰

数据来源与参考

  • Martin Fowler bliki《Inversion of Control》
  • Robert C. Martin《Clean Architecture》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌