深入了解Spring是如何做到解耦的

我们都知道Spring的主要目的是降低耦合,而Spring是如何做到降低耦合的呢?

Spring主要有两个功能,IOC(inversion of control)与AOP(Aspect-Oriented Programming)

IOC(控制反转):IOC的控制反转名字是怎么来的呢,这就要说到他的作用了。 

上图代表我们程序里的四个对象A,B,C,D,可以看到他们互相之间有着紧密的联系,如果其中的某个齿轮停止转动,则会导致所有的齿轮都跟随停止。

而我们写程序最求的目标是高内聚,低耦合,明显上图中程序耦合度没有满足我们的目标。

1996年,Michael Mattson在一篇有关探讨面向对象框架的文章中,首先提出了IOC 这个概念。对于面向对象设计及编程的基本思想,前面我们已经讲了很多了,不再赘述,简单来说就是把复杂系统分解成相互合作的对象,这些对象类通过封装以后,内部实现对外部是透明的,从而降低了解决问题的复杂度,而且可以灵活地被重用和扩展。IOC理论提出的观点大体是这样的:借助于“第三方”实现具有依赖关系的对象之间的解耦,如下图: 

 

 

可以看到,我们加入了第三方容器“IOC”之后,我们的4个对象之前并没有了任何的联系,一切都被第三方容器控制着。如果是以前对象A如果想要调用对象B中的某个方法,就需要现在对象A中new一个对象B,创建一个对象B的实例之后再调用,这个过程的主动权完全由对象A来控制。而加入了IOC容器之后,对象A如果想要调用对象B,就需要通知IOC我需要调用对象B,这时IOC容器找到对象B的实例注入到对象A中,这个过程对于对象A来说完全是被动的,控制权都交到了IOC手里,这就是IOC控制反转的由来,由主动转为被动。

IOC的别名:依赖注入(DI)
2004年,Martin Fowler探讨了同一个问题,既然IOC是控制反转,那么到底是“哪些方面的控制被反转了呢?”,经过详细地分析和论证后,他得出了答案:“获得依赖对象的过程被反转了”。控制被反转之后,获得依赖对象的过程由自身管理变为了由IOC容器主动注入。于是,他给“控制反转”取了一个更合适的名字叫做“依赖注入(Dependency Injection)”。他的这个答案,实际上给出了实现IOC的方法:注入。所谓依赖注入,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。
所以,依赖注入(DI)和控制反转(IOC)是从不同的角度的描述的同一件事情,就是指通过引入IOC容器,利用依赖关系注入的方式,实现对象之间的解耦。

  • 10
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值