如何理解Spring IOC实现了解耦合

784 阅读3分钟

要理解IOC的解耦合操作,首先我们得搞清楚什么是耦合?怎么做才是解耦合?什么又是IOC呢?然后我们才能知道IOC如何实现解耦合操作。

什么是耦合?

软件内部不同模块之间相互联系以及紧密的程度就是耦合。如果模块之间联系得越紧密,那么就说明耦合性越高,模块的独立性就越差。 那么在开发中,如果对象之间的耦合度很高的话,也就是说对象之间的依赖性越强的话,维护的成本自然就越高,因此在设计时应使对象之间的耦合变到最小,尽量达到低耦合。


那么怎么做才是解耦呢?

解耦也就是字面上的意思解除耦合关系。 在软件开发中,把降低模块之间的耦合程度即可以理解为解耦操作,我们总是听到别人说高内聚、低耦合,也是软件设计衡量模块独立程度的标准。但实际上要想达到理论上的绝对零耦合是做不到的。所以最好能达到松耦合的状态,即在保证实现功能的前提下尽量减少类和类之间的耦合。我们可以利用接口的多态达到这一目标,通过不同的实现类让调用方对具体实现不去关心,从而达到松耦合的目的。


什么是Spring框架的IOC,它又是如何做到解耦的呢?

首先IOC全称是Inversion of Control翻译过来就是控制反转,IOC其实不是一种技术,它更是一种设计思想。IOC的出现主要作用就是解耦。 在平时的JavaWeb应用程序开发中,我们要完成某一个模块功能时,可能会需要两个或以上的对象来一起协作完成,在以前没有使用Spring框架的时候,每个对象在需要别的对象协助时,都需要自己通过new的方式将协作的对象实例化出来,创建协作对象的权限在自己手上,自己需要哪个,就主动去创建就可以了,而这样做呢,会使得对象之间的耦合变高,A对象需要B对象时,A对象来实例化B对象,这样A对象就对B对象产生了依赖,也就是A对象和B对象之间存在一种紧密耦合关系,而使用了Spring框架之后就不一样了,创建B对象的工作交由Spring框架来帮我们完成,Spring创建好这个对象以后,会存储到一个容器里面,当A对象需要时,Spring就会从容器中注入进来,至于Spring是如何创建这个对象的,A对象其实并不需要关心,A对象需要B对象时,Spring来创建B对象,然后给A对象就可以,从而达到松耦合的目的。

所以控制反转IOC是说创建对象的控制权发生了转移,由以前主动创建的权限,到现在把权限转移交给了IOC容器,它是创建对象的工厂,你需要什么对象,它就给你创建出来,然后你需要的时候,注入进来就可以了,有了IOC容器之后,原来的依赖关系就没有了,它们都依赖IOC容器来帮我们建立它们之间的关系。

如果你还是不太理解IOC,那么举个例子就比如说人饿了想要吃饭。如果不使用IOC的话,你就得自己去菜市场买菜、做饭才能吃上饭。用了IOC以后,你可以到一家饭店,想吃什么菜你点好就可以了,具体怎么做你不用关心,饭店做好了,服务员端上来你负责吃就可以了,其它的交给饭店来做。