控制反转(IoC) 是一种设计原则:对象不再自己创建或查找它所依赖的协作者,而是由外部容器(或调用方)把依赖“注入”进来。控制权从组件内部反转到了外部框架,因此得名。依赖注入(DI)是 IoC 最常见的实现方式。
它改善设计的核心在于解耦与可替换性:类只依赖抽象接口,不关心具体实现从哪来,于是替换实现(如把真实数据库换成内存实现)、编写单元测试、独立演进模块都变得容易。同时也把对象装配的逻辑集中到一处(容器配置),避免了散布各处的 new 和单例。
需要注意的易错点:IoC 不等于 DI——事件回调、模板方法、插件机制同样体现了控制反转;过度使用容器会让依赖关系隐式化,排查时不如显式构造直观。追问方向:构造器注入 vs Setter 注入的取舍、IoC 与 DIP(依赖倒置原则)的关系。
class OrderService {
private final PaymentGateway gateway; // 依赖抽象
OrderService(PaymentGateway gateway) { // 由外部注入
this.gateway = gateway;
}
}