耦合是什么意思 深度耦合是什么意思

IoC 和 DI 都是 Spring 框架中的重要概念,就像玫瑰花与爱情一样,IoC 和 DI 通常情况下也是成对出现的。那 IoC 和 DI 什么关系和区别呢?接下来,我们一起来看。
IoC 是 Inversion of Control 的缩写,翻译成中文是“控制反转”的意思,它不是一个具体的技术,而是一个实现对象解耦的思想。
要解释什么是解耦?就要了解什么是耦合,所谓的耦合是指:两个或两个以上对象存在依赖,当一方修改之后会影响另一方,那么就说这些对象间存在耦合。而解耦就是解除两个或两个以上对象,修改之后影响另一方的问题。
那 IoC(控制反转)是如何实现解耦的呢?
我们来举一个例子,比如 A 对象中需要使用 B 对象的某个方法,那么我们通常的实现方法是这样的:
class A {
public void init() {
// 调用 B 类中的 init 方法
B b = new B();
b.init();
}
}
class B {
public B() {
}
public void init() {
System.out.println(&34;你好,世界。&34;);
}
}然而此时对象 A 和对象 B 是存在耦合的,因为一旦修改了 B 对象构造方法的参数之后,那么 A 对象里面的写法也要跟着改变,比如当我们将构造方法改为以下代码时:
class B {
public B(String name) {
System.out.println(&34;姓名:&34; + name);
}
public void init() {
System.out.println(&34;你好,世界。&34;);
}
}此时构造方法已经从原本无参构造方法变成了有参的构造方法,这里不考虑构造方法重载的情况,因为实际业务中,很可能是 B 类的构造方法写错了,忘记加参数了,于是后面又补充了一个参数,此时是不需要对构造方法进行重载的,那么此时,之前对象 A 里面的调用就会报错,如下图所示:

这就是开发中经常遇到的一个问题,那怎么解决呢?
我们可以通过将对象传递而并 new 对象的方式来解决,如下代码所示:
class A {
// 先定义一个需要依赖的 B 对象
private B b;
// 通过构造方法实现赋值(初始化)
public A(B b) {
this.b = b;
}
public void init() {
// 调用 B 类中的 init 方法
b.init();
}
}
class B {
public B(String name) {
System.out.println(&34;姓名:&34; + name);
}
public void init() {
System.out.println(&34;你好,世界。&34;);
}
}这样改造之后,无论构造方法怎么修改,即使需要加更多的参数,而调用它的 A 类都无需做任何修改,这样就实现了对象的解耦。
那这个解耦的示例和 IoC 有什么关系呢?
IoC 实现的思路和上述示例一样,就是通过将对象交给 Spring 中 IoC 容器管理,在其他类中不直接 new 对象,而是通过将对象传递到当前类的方式来实现解耦的。
在 new 对象的时代,对象的管理权是由当前类控制的,而有了 IoC 之后,对象的管理权就交给非当前类的 IoC 容器管理了,此时对象的管理权就发生了反转和改变,这就是 IoC,这就是控制(权)反转。
DI 是 Dependency Injection 的缩写,翻译成中文是“依赖注入”的意思。依赖注入不是一种设计实现,而是一种具体的技术,它是在 IoC 容器运行期间,动态地将某个依赖对象注入到当前对象的技术就叫做 DI(依赖注入)。
在上述示例中,A 类在使用 B 类时,就是通过构造方法将依赖对象 B 引入的,这种实现方法就可以看作是通过构造方法实现依赖注入的手段,具体代码如下:
class A {
// 先定义一个需要依赖的 B 对象
private B b;
// 通过构造方法实现赋值
public A(B b) {
this.b = b;
}
public void init() {
// 调用 B 类中的 init 方法
b.init();
}
}从上面的内容中我们可以看出,IoC 和 DI 虽然定义不同,但它们所做的事情都是一样的,都是用来实现对象解耦的,而二者又有所不同:IoC 是一种设计思想,而 DI 是一种具体的实现技术。
比如,磊哥今天心情比较好,想出去吃顿好的,那么“想吃顿好的”就是一种思想、就是 IoC。
但什么才是“好的(饭)”呢?海底捞还是韩式料理?具体吃什么是 DI。
因此“磊哥今天心情比较好,想出去吃顿好的”是一种思想、是 IoC,而吃一顿海底捞而非韩式料理就是具体的实现、是 DI。
IoC 和 DI 都是 Spring 框架中的重要概念,它们都是用来实现对象解耦的,其中 IoC(控制反转)是一种设计思想,而 DI(依赖注入)是一种具体的实现手段。
基于当下现实的经济观察:中国老百姓的消费能力,都去哪里了?
#冬日生活打卡季#首发头条平台,抄袭搬运必究!(有看到抄袭搬运的读者朋友也请帮忙举报一下,首发和原创标签只有在头条平台。感激不尽!)这是熊猫贝贝的第2093篇原创文章#居民消费减弱,都有哪些原因?#2023年已经正式走向尾声,从经济角度来看,对于中国这个国家,最大的超出预期,恐怕就是年初定下的“消费拉动”规划,并没有得到预期效果兑现。大财经2023-12-01 15:53:460000刘小涛吴庆文会见唯品会董事长沈亚等企业家一行
1月9日,市委书记刘小涛,市委副书记、市长吴庆文会见了唯品会董事长沈亚一行,并共同见证苏州市商务局与唯品会签署战略合作协议、苏州高新区与唯品会签署项目投资协议。星河湾集团董事长黄文仔、佳都科技集团董事长刘伟、广发证券董事长林传辉、海大集团董事长薛华、白云电气集团董事长胡德良、思必驰科技董事长高始兴参加会见。大财经2024-01-12 12:58:530001六国论原文及翻译 《六国论》全文注音
高中语文部编版:必修下册六国论本文是苏洵政论文的代表作品,提出并论证了六国灭亡“弊在赂秦”的精辟论点,“借古讽今”,抨击宋王朝对辽和西夏的屈辱政策,告诫北宋统治者要吸取六国灭亡的教训,以免重蹈覆辙。1.语言建构与运用:积累重点文言实词、虚词、句式,学会从语言入手读通读懂文言文。2.思维发展与提升:了解苏洵撰写此文的真正目的,理解其借古讽今、反对求和的思想。大财经2023-03-21 00:52:100002玛雅图霸天下 玛雅board确认
文明因交流而多彩,文明因互鉴而丰富。习近平主席在2014年亚洲相互协作与信任措施会议第四次峰会上首次提出了召开亚洲文明对话大会,推动不同文明、不同宗教交流互鉴、取长补短、共同进步的重大倡议。在2015年博鳌亚洲论坛上,习近平主席又一次提出召开亚洲文明对话大会的重大倡议。图为国家主席习近平在海南出席博鳌亚洲论坛2015年年会开幕式并发表主旨演讲。新华社记者兰红光/摄大财经2023-03-24 11:45:150002注册苹果id账号 申请id号注册免费
AppleID是您用于访问Apple服务(如AppStore、AppleMusic、iCloud、iMessage、FaceTime等)的帐户。而且,您可以使用同一AppleID和密码登录所有Apple服务。网页版注册AppleID大财经2023-03-22 17:01:270000