这是学习Sping 的第一篇文章,我们先来看看再引入Spring之前,我们的程序是怎么走的,是怎么耦合的,Spring又是提供了怎样的解决方案。
生活例子
先举一个生活中的例子,假如我们需要去参加一个高端晚宴,那么作为贵宾,我们当然需要精心装扮打点一下自己。比如皮鞋,西装,那是比不可少。但是假如皮鞋,西装都要我们自己做的话,那该多麻烦,哦!可能还多了一个帽子呢!那我们得做到猴年马月才能参加得了晚宴,我们什么时候需要跟制造业耦合了(我们可是高端人士啊)。当然,常识上我们知道,这些东西我们只要去超市里面买就可以了,只要有钱什么都不需要自己做。这个现象不就是我们和制造业解耦了吗。
程序例子
从这个简单的程序可以看出,person想要去参加晚宴,需要先new一辆保时捷才行,我们称之为person依赖了Car对象,要是哪天还需要一辆飞机,再加上一定帽子什么的,客户端也就是程序中的Test还需要去new一个。这就是耦合。
那该怎么办呢?
我们可以借鉴生活啊,我们需要什么,我们其实不需要去制造创建它,只需要到特定的地方去取过来使用就好了嘛。Spring的Ioc容器就是这个特定的地方
用图简单的描述一下有用Ioc与没用Ioc的区别:图来自https://www.iteye.com/blog/jinnianshilongnian-1413846
Spring中的Ioc与DI
有了IoC容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是松散耦合,这样也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。
其实IoC对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但是在IoC/DI思想中,应用程序就变成被动的了,被动的等待IoC容器来创建并注入它所需要的资源了。
控制反转的深度解析:
谁依赖于谁:当然是应用程序依赖于IoC容器;
●为什么需要依赖:应用程序需要IoC容器来提供对象需要的外部资源;
●谁注入谁:很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象;
●注入了什么:就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)