一、IOC是什么?

IOC全称为“Inversion of Control”,即控制反转,不是一种技术,而是一种设计思想。在这种设计思想中,你设计好的对象交给容器管理,而不是在应用程序内部对对象进行管理。控制的含义是IOC容器控制了对象(也可以包括文件及其他外部资源);而反转的含义是IOC容器负责创建及注入依赖的对象,但在传统的应用程序中,我们需要在对象内部去创建(new)依赖的对象,这叫“正”,在这样的情况下,对象之间的耦合度就非常高。IOC更像是一种中介,帮助雇佣者和被雇佣者。我觉得支付工具如支付宝就像是淘宝体系中的一个IOC。

二、DI是什么?

DI全称为“Dependency Injection”,即依赖注入,在系统运行过程中,动态的向某个对象注入它所依赖的对象。比如A依赖一个对象B(一般依赖的是接口),在运行前,A并不知道自己依赖的B的具体实现是怎么样的,IOC容器会在适当的时候为A创建一个合适的B对象,并且注入,这就是依赖注入。

三、IOC与DI的关系?

IOC是一个比DI更为宽泛的概念,但是其思想是类似的。IOC是一种目的,DI是一种手段,为了达到控制反转的目的,即程序员不需要自己new对象,对象由容器控制这个目的,Spring框架提供了依赖注入的手段,哪里需要对象,就在哪里注入。

四、IOC的优点?

1、资源不再由使用的双方管理,而是由第三方集中管理,实现了资源的可配置和易管理,降低了使用双方的耦合度,使得面向接口编程更容易实现,使得系统架构可扩展性更加高。

2、易实现各种设计模式,如策略模式,不需要自己构建策略对象池(结合项目)。

3、不需要再new对象,编码更加简单。传统的开发中,Servlet依赖于一个XXXService时,需要在每个Serlvet中都new一个XXXService,容易导致对象重复,浪费JVM的堆空间,当然也可以使用单例模式,但是需要自己编写,代码更复杂。

五、Spring 容器结构。

简单的说,Spring容器中主要有Bean定义注册表、Bean缓存池。Bean定义注册表(BeanDefinitionRegistry)存储Bean定义(BeanDefinition),BeanDefinition描述Bean的配置信息,可以来自xml配置文件中的<bean>,也可以来自Java代码或注解声明的Bean。Bean缓存池是一个HashMap,Key为Bean的Id,而Value为对象。

(图片来自网络)

Spring 容器通过配置文件描述Bean描述信息及Bean之间的依赖关系,利用Java语言的反射功能实例化Bean并建立Bean之间的依赖关系。Spring在完成这些底层工作的基础上,还提供了Bean实例缓存、生命周期管理、Bean实例代理、事件发布等高级服务。

六、BeanFactory

BeanFactory是Spring框架的基础设施,面向Spring本身,一般程序员不会直接使用BeanFactory,是各种BeanFactory的顶层接口,主要提供的是各种getBean()方法。

七、ApplicationContext

ApplicationContext是由BeanFactory派生而来,提供了许多更加高级的功能。

八、容器加载Bean的过程

1、BeanDefinitionReader读取Resource所执行的配置文件资源,解析配置文件,并将生成的BeanDefinition对象保存到BeanDefinitionRegistry中。

2、容器扫描Bean定义注册表中的BeanDefinition对象,调用InstantiationStrategy进行Bean实例化的工作;采用BeanWrapper完成Bean属性的设置工作。

3、若是单例的Bean,则将Bean缓存在Bean缓存器中。

部分内容参考:点击打开链接

Spring IOC 和 DI原理 (面试必备)相关推荐

  1. Spring IOC与DI、反射的理解 含小案例说明

    阅览了很多篇博文,对于Spring IOC和DI看到很多人介绍的感觉都很含糊,读完之后还是觉得混淆的不行,也有的人认为DI是IOC的另一种说法-emm,可能个人理解不同吧,我的观点并不然.但这种东西, ...

  2. Spring IOC和DI

    Spring  IOC和DI 框架:  将一些公用的模块进行集成,通过框架的形式进行管理(事务控制,权限控制(Shiro),日志收集log) Spring框架  SSH: Struts2(配置重型)+ ...

  3. spring IOC和DI

    spring IOC and DI 1.IOC和DI的区别: IOC:对象的管理权由spring容器掌握(管理权限包括:对象的创建时间点.创建方式以及对象属性的管理): DI:spring操作对象属性 ...

  4. 手写实现Spring(IOC、DI),SpringMVC基础功能

    手写实现Spring(IOC.DI),SpringMVC功能 spring和springMVC的用法相信大家都不陌生,我简单讲下我实现的思路 spring阶段 事项 配置 配置web.xml: ini ...

  5. 浅谈Spring IOC和DI及Spring工厂类

    浅谈Spring IOC和DI及Spring的工厂类 文章目录 浅谈Spring IOC和DI及Spring的工厂类 一. IOC 1.什么是IOC 2.为什么使用IOC 传统开发模式的弊端 3. 使 ...

  6. 【Spring 源码阅读】Spring IoC、AOP 原理小总结

    Spring IoC.AOP 原理小总结 前言 版本约定 正文 Spring BeanFactory 容器初始化过程 IoC 的过程 bean 完整的创建流程如下 AOP 的过程 Annotation ...

  7. spring IOC和DI 理解

    IOC(控制反转)和DI(依赖注入)是spring中的重要组成部分,下面是个人的一些理解,不代表官方. 1.IOC是什么? IOC:全名是Inversion of Controller 中文解释是控制 ...

  8. Spring:IoC和DI完成打印机打印详细说明过程及代码

    Spring:IoC和DI完成打印机 课后作业 使用Spring的IoC.DI 装配一台打印机 纸张接口 实现 有: A4 A5 墨盒接口 实现 有:黑白 彩色 注解方式和非注解方式都要 说明:1.首 ...

  9. 关于RuoYi中Spring IOC、DI以及MVC不同注解的使用

    1.什么是Spring IOC.DI? IOC(inverse of control)即"控制反转",DI(Dependence Injection)即"依赖注入&quo ...

最新文章

  1. json 数据类型简介
  2. golang之包和锁的机制
  3. 使用 icon 字体图标出现小方块问题
  4. 自建ELK迁移阿里云日志服务
  5. 怎么能把看不清的照片给看清_远视怎么矫正?需要佩戴眼镜吗?
  6. linux gst qt,【ARM-Linux开发】Gstreamer+QT+摄像头 编程总结
  7. 数据积分-牛顿科茨法与高斯勒让德法对比及示例
  8. Unity3d札记 --TanksTutorial收获与总结
  9. 电脑会在哪些地方暴露你的隐私
  10. gcc编译C++ 符号名解码 c++filt demangle
  11. windows删除文件时需要管理员权限的方法
  12. 如何设置html背景,如何给html设置背景
  13. Linux 下屏幕旋转
  14. 【Windows Server 2019】DHCP服务器配置与管理——安装和配置DHCP服务 Ⅱ
  15. 招商头条:北京市集中力量补齐5G产业短板;投资50亿元的格力成都产业园开工
  16. bat 脚本修改IE浏览器代理服务器
  17. Tarjan算法小结1——SCC
  18. IntelliJ IDEA Remote Development 使用体验
  19. 总结常用的Javafx功能及用法(上)
  20. Contract Coin (C-coin)4月12日全球正式上线

热门文章

  1. 一拖再拖,刁肥宅个人主页终上线!
  2. 项目管理进阶--软件开发项目中的团队组成
  3. ARM汇编指令—CPSR访问指令(mrsmsr)
  4. html页面计算圆的周长和面积,计算圆的周长和面积(VB)
  5. java GUL编程
  6. Linux-Apache服务器常规设置——用户个人主页
  7. Word域的应用和详解
  8. http://mirrors.aliyun.com/centos/7/os/x86_64/repodata/repomd.xml: [Errno 14] curl#6 - “Could not res
  9. 中国服务器审计系统,汉邦服务器监控与审计系统
  10. 计算机监控系统软件设计,计算机监控软件设计.doc