什么是IOC?
提到IOC,我们通常能想到Spring框架,然后就想到三个特性,控制反转,依赖注入(DI),面向切面编程(AOP)。
IOC就是一个容器,以Map形式的容器(Key,Value)。举个例子来讲,通常我们在开发中,会创建一些Bean对象,写一些注解,而我们写完这些东西之后,它们会存在这个IOC容器中,以键值对形式存入,当我们用时,容器就会通过Key值来获取,供给我们使用。这样来讲就会很好理解。
什么是控制反转?
简单来说,可以理解为控制权发生了反转。主要对于对象的创建或使用,对象的控制权反转给IOC容器,而不是我们开发者。
举个例子,没有引入IOC容器之前,对象A依赖于对象B,那么对象A在初始化或者运行到某一刻,自己必须主动去创建对象B,无论是创建还是使用,控制权均在开发者手中。
引入IOC容器后,对象A和对象B之间失去了直接联系,可以理解为解耦,当对象A需要对象B时,IOC容器会主动创建个B对象,依赖注入给A需要的地方,控制权在IOC上。
由以上来看,控制权发生了颠倒,也就是所说的反转,这就是控制反转。
依赖注入(DI)
控制被反转后,获得依赖对象的过程由自身管理变为了由IOC容器主动注入。依赖注入是实现IOC的方法,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。