Spring IOC DI实现思路 实现原理

IOC是什么

控制反转,本质上是一种新型的设计模式,在Springboot中有着广泛的运用;同时也成为了Springboot最重要的特征之一。

IOC的思想,可以理解为一种“中介”的思想。

我们经常可以在各种地方看到,“IOC是一种解耦的思想”之类的话,但是它是如何实现解耦的?

打个比方,比如说你想找对象结婚。正常情况下,如果你要找对象,就是主动去发出找对象的这个动作。
但是你还有另一种方法——你去找婚姻中介。
中介手上有各种各样的对象的信息,于是中介就可以主动把你要找的对象提供给你。

通过加一个“中介”,来减少你跟“对象“之间的耦合。

对应在程序上,就是下面两个图的差别:
不用IOC
使用IOC

这个IOC容器就是“中介”,他知道其他“对象”的信息,等你要一个对象了他就直接给你分配你要的那种type。

IoC很好的体现了面向对象设计法则之一—— 好莱坞法则:“别找我们,我们找你”;即由IoC容器帮对象找相应的依赖对象并注入,而不是由对象主动去找。

IOC(控制反转)与DI(依赖注入)

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

所以,依赖注入(DI)和控制反转(IOC)是从不同的角度的描述的同一件事情,就是指通过引入IOC容器,利用依赖关系注入的方式,实现对象之间的解耦。
我们举一个生活中的例子,来帮助理解依赖注入的过程。大家对USB接口和USB设备应该都很熟悉吧,USB为我们使用电脑提供了很大的方便,现在有很多的外部设备都支持USB接口。

IOC在SpringBoot之中的实现

通过反射机制+XML实现

Springboot的流程:

  1. 初始化Spring容器
  2. 获取扫描包下所有class
  3. 解析class中的注解信息
  4. 封装类反射后实例化对象
  5. 以<beanid,bean实例化对象(包含bean中的方法信息)>存储
  6. 本地方法调用bean中的方法的时候:
    • getbean
    • Bean的实例化类对象
    • Bean的具体方法以及执行结果

下一期复习一下反射。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值