[Spring]什么是IOC-好莱坞原则

目录

前言:

1. 什么是IOC?

1.1 好莱坞原则是什么?

1.1.1 什么是多态

1.1.2 回调

1.1.3 OCP原则是什么?

1.1.4 IOC的通俗解释

1.1.5 DI?

1.1.6 为什么说IOC是好莱坞原则?


前言:

 IOC主要的两种实现(依赖处理):依赖查找和依赖注入。

IOC的目的:解耦,关注于设计最终的目标而不是实现。

IOC的容器的职责:依赖处理,生命周期管理(容器,托管的资源-javabean等)。

1. 什么是IOC?

简答:IOC是控制翻转,类似于好莱坞原则,主要有依赖查找和依赖注入的实现。

1.1 好莱坞原则是什么?

Hollywood principle, 《编程导论(Java)》中提到,"Don't call me; I'll call you."      (don't call us, we'll call you)

现实生活中,乘客/you打的士到某地,沿途问司机/me某个景点,天经地义;但是,乘客/you不要从上车的第一秒开始,时时刻刻或每隔5秒问一下司机/me:到了打的的目的地没有,这也太烦人了。

 注意:好莱坞原则中的me是指 下层模块!

通常,Client即you(上层模块)调用下层Server即me天经地义,但是,对于某些方法,你不要轮询/骚扰我,我通知你

如果不采用通知方式——即不应用好莱坞原则,上层可以轮询。

好莱坞原则的核心:以通知替代轮询。

1.1.1 什么是多态

为什么提到这个呢?因为好莱坞原则跟多态也是有关系的。

父类型的引用指向子类型的对象。用一句比较通俗的话:同一操作作用于不同的对象,可以产生不同的效果。这就是多态。

就比如简单工厂模式,其实就是一种多态。

多态的使用场景(1)方法的重载和重写(2)子类对象的多态性

使用前提:a.有类的继承 b.由子类对父类方法的重写

使用方式:通过父类的引用指向子类的对象

好处:消除了类之间的耦合

1.1.2 回调

在分层结构中,上层依赖于下层,最后依赖于基础设施(如JDK、各种框架)。

因为依赖必须是单向

依赖的单向性,又因为子类依赖父类,所以:如果两者不同层,子类必须为上层模块。

1.1.3 OCP原则是什么?

Open Closed Principle, OCP

Software entities like classes, modules and functions should be open for extension but closed for modifications.

一个软件实体如类,模块和函数应该对扩展开放,对修改关闭。

应该通过扩展来实现变化,而不是通过修改已有的代码来实现变化。(这个说的很有道理)

相关参考,转载部分:https://blog.csdn.net/yqj2065/article/details/8758101

1.1.4 IOC的通俗解释

IoC 也被称为好莱坞原则,“不要给我们打电话,我们会打给你”

控制反转,其实是一种思想。一种主动提供服务的思想。

IOC,就是由Spring负责控制对象的生命周期和对象间的关系,与我们传统的在对象内部直接控制背道而驰。  

控制反转 就是把控制交给了spring统一管理。

在传统的程序开发中,完成一个业务逻辑至少需要两个或两个以上的对象协助完成。通常一个对象要使用另外一个对象,都是直接在对象内部通过new进行创建对象,由程序主动去创建以来对象。 但这就代表着当前的模块和它所依赖的对象紧紧耦合了。

IOC就是让spring主动创建和注入了依赖对象。

传统程序开发: 主动创建对象—>组装对象

但是,IOC容器:生产线—创建和组装对象,客户端直接获取

所以感觉spring就是一个大的工厂~

1.1.5 DI?

Spring的Ioc容器主要使用DI方式实现的,不需要主动查找,在系统运行过程中,动态的向某个对象提供它所需要的其他对象。

可以说@Autowired就是注入的一种吧~我感觉

所以需要用啥,就注入啥进入到这个类,我们不需要关心什么时候创建,怎么创建的。

大概就想打针一样注入进去 所以才叫做依赖注入吧~

依赖注入主要是通过反射机制来实现的。同时IOC提供了三种依赖注入的方式,分别是构造方法注入、setter方法注入和接口方法注入。

1.1.6 为什么说IOC是好莱坞原则?

我感觉就是你作为客户端,或者说是spring的上层,不需要关心spring 底层是怎么实现的这个东西。

我们只需要去拿就可以了,而不用一直去问spring 创建了么?

这个好莱坞原则是针对me来说的,也就是,我作为上层,我只需要去给容器打电话,而容器你不要老师来告诉我创建好了。

我需要我就去找你拿了

 

DONE~接下来是场景的使用和DI的方式~

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值