目录

前言:

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-好莱坞原则相关推荐

  1. 好莱坞原则和IOC控制反转

    "不要给我们打电话,我们会给你打电话(don't call us, we'll call you)"这是著名的好莱坞原则.在好莱坞,把简历递交给演艺公司后就只有回家等待.由演艺公司 ...

  2. java spring server_Java server框架之(1):spring中的IoC

    为什么需要IoC? 一般的对象耦合是在编译时确定的,也就是说当我们写如下类: 1 public classStaticCoupling { 2 3 String s = new String(&quo ...

  3. 优雅のJava(五)—— 优雅的观察对象与订阅信息 观察者模式 好莱坞原则

    文章目录 专栏导航 前言 好莱坞原则 工厂模式的思路借鉴 IOC的思路借鉴 问题核心 即时通讯的思路借鉴 GUI设计上的思路借鉴 后记 专栏导航 优雅のJava(零)-- 面向问题的学习 前言 这篇主 ...

  4. 请简述什么是spring的ioc和di_理解Spring中的IoC和DI

    什么是IoC和DI IoC(Inversion of Control 控制反转):是一种面向对象编程中的一种设计原则,用来减低计算机代码之间的耦合度.其基本思想是:借助于"第三方" ...

  5. Spring中的IOC是什么意思,为什么要用IOC而不是New来创建实例?

    这里是修真院后端小课堂,每篇分享文从 [背景介绍][知识剖析][常见问题][解决方案][编码实战][扩展思考][更多讨论][参考文献] 八个方面深度解析后端知识/技能,本篇分享的是: Spring中的 ...

  6. 比Spring简单的IoC容器

    比Spring简单的IoC容器 Spring 虽然比起EJB轻量了许多,但是因为它需要兼容许多不同的类库,导致现在Spring还是相当的庞大的,动不动就上40MB的jar包, 而且想要理解Spring ...

  7. Spring核心技术之IOC容器(一):IOC容器与Bean简介

    最近开始研究Spring框架,今天学习Spring的核心内容IOC 与 Bean 1. Spring IOC 与 Bean 简介  Inversion of Control (IoC)即控制反转,也叫 ...

  8. 抛开 Spring 去理解 IOC 思想:原来 IOC 容器这么简单

    很多小伙伴们看到标题可能就会想到抛开 Spring 就不会存在 IOC 思想了,其实不然在接下来的文章中就会讲述到. 很多小伙伴在理解 IOC 的时候通常会和 Spring 放到一起去学习,首先呢 S ...

  9. java元婴期(17)----java进阶(spring(1)----spring基本概念IOC)

    1.spring是什么? Spring是分层的Java SE/EE应用 full-stack轻量级开源框架,以IoC(Inverse Of Control:反转控制)和AOP(Aspect Orien ...

  10. ioc spring 上机案例_抛开Spring去理解IOC思想 - 原来IOC容器这么简单

    很多小伙伴们看到标题可能就会想到抛开Spring就不会存在IOC思想了,其实不然在接下来的文章中就会讲述到. 很多小伙伴在理解IOC的时候通常会和Spring放到一起去学习,首先呢Spring设计的非 ...

最新文章

  1. C语言与C++不得不说的那点事
  2. mac下的tensorflow报错提示没有models库
  3. 2018/7/17-纪中某C组题【jzoj4024,jzoj4025,jzoj2136,jzoj2137】
  4. c语言均值滤波程序,均值滤波C语言代码实现的一种简单方式
  5. 谁都能看懂的网络模型知识
  6. 执行公式_一学就会,一吃就瘦,超简单又好执行的减肥食谱公式!
  7. Gtk-WARNING : cannot open display----这个问题在NVIDIA TX2上碰到过就是DISPLAY=“:0“
  8. JSF请求处理过程(二)请求处理过程总览(FacesServlet#service)
  9. BIO,NIO,AIO总结(一)
  10. Nginx启动报[10013]错误
  11. unix服务器上传文件,Unix lrzsz命令 上传本地文件到服务器 / 发送文件到客户端...
  12. layui 弹窗自适应高度_layui弹框自适应高度
  13. MySQL删除重复数据
  14. PyTorch中nn.xx与nn.functional.xx的区别
  15. 如何使用c语言开发ebpf程序
  16. 批量采集抓取淘宝宝贝上传,采集商品软件
  17. 【数据库设计-2】权限设计-系统登录用户权限设计
  18. 上万条流行经典语录大全ACCESS数据库
  19. 华为手机上html怎么打开,华为手机root权限怎么开启?详细的步骤以及图文教程...
  20. PPT打开显示找不到 ppcore.dll,无法打开 PPT

热门文章

  1. git 上传空文件夹
  2. VRRP(出现背景、工作原理、VRRP报文)
  3. 后端SMM+前端Vue示例项目开发总结
  4. ARM嵌入式开发板学习路线指引
  5. 阿里云服务器学生机的申请与使用
  6. 数据库学习(mysql)----一些理论
  7. 《Android源码设计模式解析与实战》读书笔记(十)
  8. 运算放大器的交流放大分析
  9. C++——文件指针定位--fseek,ftell
  10. VR升级换代正当时:Pico G2 4K评测体验