控制反转(IoC: Inversion of Control)是 Spring Framework 的核心基础特性,也是面向对象程序设计中的重要原则,其目的在于降低程序之间的耦合度。控制反转一般分为 依赖注入(DI: Dependency Injection) 和 依赖查找(DL: Dependency Lookup) 两种类型,不过依赖注入应用更加广泛,所以大部分时候依赖注入等同于控制反转。
在面向对象程序设计中,对象一般用于承载和处理数据,不同对象之间的相互依赖与合作构成了我们的软件系统。设想在大型软件系统设计中,需要大量的对象通过相互依赖和交互进行合作,如果这些依赖关系由对象自己去控制和管理,那么耦合度将会非常高,不易于系统的扩展和维护。这个时候我们可以将对象的依赖关系交由 IoC 容器进行管理,将对象的新建和引用赋值等操作交由 IoC 容器统一完成,而对象只需要专心负责承载和处理数据即可。这样的设计可以降低系统在实现上的复杂性和耦合度,让系统更加灵活,满足“开闭原则”,并易于扩展和维护。