IOC:IOC,另外一种说法叫DI(Dependency Injection),即依赖注入。它并不是一种技术实现,而是一种设计思想。在任何一个有实际开发意义的程序项目中,我们会使用很多类来描述它们特有的功能,并且通过类与类之间的相互协作来完成特定的业务逻辑。这个时候,每个类都需要负责管理与自己有交互的类的引用和依赖,代码将会变的异常难以维护和极度的高耦合。而IOC的出现正是用来解决这个问题,我们通过IOC将这些相互依赖对象的创建、协调工作交给Spring容器去处理,每个对象只需要关注其自身的业务逻辑关系就可以了。
一个系统中有很多很多的类(图1)
各个类之间几乎都有依赖关系,在ioc出现之前, 每个类管理自己的依赖,类之间直接依赖,会出现a依赖b,b依赖c的情况,非常乱,耦合度非常高,如图2,这点我是深有感触的,每次用到一个对象都要new一个
而IOC得出现就是解决这种问题,由spring容器统一管理依赖,如图3,各个类之间不再有直接的依赖,而是有容器,作为一个中间件,统一管理;
当类b中需要用到a对象时,不再主动去创建,而是由容器主动创建一个a,并且送到b中,这样就由主动获取变为了被动注入,也就是“依赖注入”与“控制反转”的由来;同时减少了直接依赖,每个类都成为了独立的,耦合度也大大降低了。