IOC(Inverse of control)是Spring的基础。
IOC,中文译为控制反转,通俗点说它的作用,就是改变了获取对象的方式。
以前学java,想要获得一个类的对象,必须使用new关键字,调用类的构造方法,然后获得返回的对象。
这样做的弊端其实很明显,第一,必须在指定包中存在已有类的已有构造器,否则编译不通过。
这一点之前学习反射时有学到过,反射机制可以解决这个弊端。
第二,如若需要更改对象或者类,则多处都需要进行更改,其实是由于new生成对象的方法耦合度高,不利于后期代码的扩展和维护。
解决这个弊端,或者说解耦的方法,就是控制反转,原本是程序员主动new,现在将构造对象的任务交给Spring框架完成。
Spring框架其实是工厂模式的实现。Spring是工厂,由它集中生产对象,并返回给需要调用对象的类。
这个过程是有框架控制的,所以称为控制反转。
工厂模式如何生产对象呢?
首先需要有一个接口,接口有不同的实现类,我们称这些实现类的对象为商品。再创建一个工厂类,工厂类中有一个获取商品的方法,向该方法中传入值,便返回对应的商品对象。这一整个过程称之为控制反转,生产对象的过程交给了工厂而非程序员。
DI(Dependency Inject),依赖注入,是一个和控制反转共存的概念。
当工厂生产对象时,也许需要同时对其中某些变量赋值,此过程,就是一个注入属性的过程。当获得返回的某一个对象时,其中的属性是已经被赋值的。此过程成为依赖注入。