好莱坞原则—Spring的IOC容器

IOC容器的概念,之前在学习SSH的时候,就有接触过。但那时候也只是知道这么个概念,觉得它很难理解。其实并不是它难理解,而是我并没有停下来好好对它总结梳理过。

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! 也就是,你不用找我们,我们会找你!


猜你喜欢

转载自blog.csdn.net/huo_yun/article/details/46637111