IoC: Inverse of Control 控制反转.

DI: Dependency Injection 依赖注入.

DL: Dependency Lookup 依赖查找.

对于一个有复杂依赖的系统, 比如组装电脑, 有整机, 主板, CPU 等层次和模块.

CPU 插到主板上, 主板插到整机里.

如果正向依赖, 构造一台整机, 整机自己需要实例化一连串的对象, 他知道主板的构造参数, 也需要知道 CPU 的构造参数.

一方面是构造困难, 再就是修改困难, 改一个基础元件就需要改整条依赖链.

IoC 就是为了解决这种耦合, 把以前整机需要自己构造对象的控制权交出来. 让整机只需要关心如何组装零件, 不用关心如何制造零件.

IoC 是一种策略, DI 和 DL 是 IoC 的具体实现方式.

DL 很少使用了, 他需要显示的调用 IoC 容器来获取依赖.

DI 是把内部依赖交给 IoC 容器来注入, 可以通过 Setter(@Autowired) 或者 构造器(@RequiredArgsConstructor).