[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的方式~
[Spring]什么是IOC-好莱坞原则相关推荐
- 好莱坞原则和IOC控制反转
"不要给我们打电话,我们会给你打电话(don't call us, we'll call you)"这是著名的好莱坞原则.在好莱坞,把简历递交给演艺公司后就只有回家等待.由演艺公司 ...
- java spring server_Java server框架之(1):spring中的IoC
为什么需要IoC? 一般的对象耦合是在编译时确定的,也就是说当我们写如下类: 1 public classStaticCoupling { 2 3 String s = new String(&quo ...
- 优雅のJava(五)—— 优雅的观察对象与订阅信息 观察者模式 好莱坞原则
文章目录 专栏导航 前言 好莱坞原则 工厂模式的思路借鉴 IOC的思路借鉴 问题核心 即时通讯的思路借鉴 GUI设计上的思路借鉴 后记 专栏导航 优雅のJava(零)-- 面向问题的学习 前言 这篇主 ...
- 请简述什么是spring的ioc和di_理解Spring中的IoC和DI
什么是IoC和DI IoC(Inversion of Control 控制反转):是一种面向对象编程中的一种设计原则,用来减低计算机代码之间的耦合度.其基本思想是:借助于"第三方" ...
- Spring中的IOC是什么意思,为什么要用IOC而不是New来创建实例?
这里是修真院后端小课堂,每篇分享文从 [背景介绍][知识剖析][常见问题][解决方案][编码实战][扩展思考][更多讨论][参考文献] 八个方面深度解析后端知识/技能,本篇分享的是: Spring中的 ...
- 比Spring简单的IoC容器
比Spring简单的IoC容器 Spring 虽然比起EJB轻量了许多,但是因为它需要兼容许多不同的类库,导致现在Spring还是相当的庞大的,动不动就上40MB的jar包, 而且想要理解Spring ...
- Spring核心技术之IOC容器(一):IOC容器与Bean简介
最近开始研究Spring框架,今天学习Spring的核心内容IOC 与 Bean 1. Spring IOC 与 Bean 简介 Inversion of Control (IoC)即控制反转,也叫 ...
- 抛开 Spring 去理解 IOC 思想:原来 IOC 容器这么简单
很多小伙伴们看到标题可能就会想到抛开 Spring 就不会存在 IOC 思想了,其实不然在接下来的文章中就会讲述到. 很多小伙伴在理解 IOC 的时候通常会和 Spring 放到一起去学习,首先呢 S ...
- java元婴期(17)----java进阶(spring(1)----spring基本概念IOC)
1.spring是什么? Spring是分层的Java SE/EE应用 full-stack轻量级开源框架,以IoC(Inverse Of Control:反转控制)和AOP(Aspect Orien ...
- ioc spring 上机案例_抛开Spring去理解IOC思想 - 原来IOC容器这么简单
很多小伙伴们看到标题可能就会想到抛开Spring就不会存在IOC思想了,其实不然在接下来的文章中就会讲述到. 很多小伙伴在理解IOC的时候通常会和Spring放到一起去学习,首先呢Spring设计的非 ...
最新文章
- struts2文件下载出现Can not find a java.io.InputStream with the name的错误
- python重命名文件或目录_Python重命名多个文件的实例方法
- 简单的五子棋操作用两种方法实现
- 线程控制、如何给面试官描述线程不安全的情况?模拟黄牛抢票展现不安全的情况及解决方式、互斥锁加锁解锁
- 中国剩余定理 —— 入门
- BZOJ 1607 [Usaco2008 Dec]Patting Heads 轻拍牛头:统计 + 筛法【调和级数】
- Windows消息目录-消息大全
- python 参数一样结果不一样_优化Keras的超参数:相同参数的结果不同
- 骁龙888打开“新象限” ,专业相机和游戏机直呼不讲武德
- 嵌入式硬件学习——分压电路
- wps表格宏被禁用如何解禁_(wps表格怎么设置宏)为什么每次打开excel文件都要提示启用或者禁用宏?...
- 缺陷管理工具大PK:UniPro、Bugzilla和Teambition哪家强
- 关于创建和替换STK软件的3D模型图方法及其介绍
- 犹太裔大陆籍华人的故事-值得一读
- 大数据权限管理sentry与Kerberos概述
- 屯特大学计算机排名,荷兰屯特大学世界排名2021
- python能参加奥赛吗-【家长必读】孩子学编程能参加哪些高含金量的比赛?
- 【时空序列预测paper】ConvLSTM:A Machine Learning Approach for Precipitation Nowcasting
- java限定符_Java-泛型限定符、通配符
- 这件小事,我坚持了 300 天