IOC(Inversion of Control)简介:
控制反转”,并不是一种技术,而是一种思想,一种主动提供服务的思想。所谓IOC,就是由Spring负责控制对象的生命周期和对象间的关系,与我们传统的在对象内部直接控制背道而驰。
在传统的程序开发中,完成一个业务逻辑至少需要两个或两个以上的对象协助完成。通常一个对象要使用另外一个对象,都是直接在对象内部通过new进行创建对象,由程序主动去创建以来对象。 但这就代表着当前的模块和它所依赖的对象紧紧耦合了。但是事实上,我们所需要的只是调用依赖对象提供的某项服务而已,但是想想如果有某种方式让这些服务主动送上来满足我们的需求,我们就不用那么费劲了。IOC也就是这么个简单的道理,主动帮忙创建和注入了依赖对象。如下图:
传统程序开发: 主动创建对象—>组装对象
IOC容器:生产线—创建和组装对象,客户端直接获取
IOC容器的思想其实很简单, 就是提供某些服务的一个中介机构,所有的资料都先在这个机构中进行登记,告诉别人你是什么?你需要什么?别人才能给你提供服务,并且也把你做为一种服务提供给其他方。
DI(依赖注入):
Spring的Ioc容器主要使用DI方式实现的,不需要主动查找,在系统运行过程中,动态的向某个对象提供它所需要的其他对象。比如说类A需要操作数据库,以前我们总是在类A中编写代码创建一个Connection对象,有了Spring之后,我们只需要告诉Spring,A需要一个Connection。至于这个Connection对象如何创建?何时创建的?类A不需要关心,在系统运行时,Spring会在适当的时候制造一个Connection对象,像打针一样,注射到类A中。
依赖注入主要是通过反射机制来实现的,在前两篇博客中已经有介绍。同时IOC提供了三种依赖注入的方式,分别是构造方法注入、setter方法注入和接口方法注入。
Spring的IOC容器设计思想就跟好莱坞原则一样:Don't call us, we will Call you! 也就是,你不用找我们,我们会找你!