Spring IOC 和 DI原理 (面试必备)
一、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原理 (面试必备)相关推荐
- Spring IOC与DI、反射的理解 含小案例说明
阅览了很多篇博文,对于Spring IOC和DI看到很多人介绍的感觉都很含糊,读完之后还是觉得混淆的不行,也有的人认为DI是IOC的另一种说法-emm,可能个人理解不同吧,我的观点并不然.但这种东西, ...
- Spring IOC和DI
Spring IOC和DI 框架: 将一些公用的模块进行集成,通过框架的形式进行管理(事务控制,权限控制(Shiro),日志收集log) Spring框架 SSH: Struts2(配置重型)+ ...
- spring IOC和DI
spring IOC and DI 1.IOC和DI的区别: IOC:对象的管理权由spring容器掌握(管理权限包括:对象的创建时间点.创建方式以及对象属性的管理): DI:spring操作对象属性 ...
- 手写实现Spring(IOC、DI),SpringMVC基础功能
手写实现Spring(IOC.DI),SpringMVC功能 spring和springMVC的用法相信大家都不陌生,我简单讲下我实现的思路 spring阶段 事项 配置 配置web.xml: ini ...
- 浅谈Spring IOC和DI及Spring工厂类
浅谈Spring IOC和DI及Spring的工厂类 文章目录 浅谈Spring IOC和DI及Spring的工厂类 一. IOC 1.什么是IOC 2.为什么使用IOC 传统开发模式的弊端 3. 使 ...
- 【Spring 源码阅读】Spring IoC、AOP 原理小总结
Spring IoC.AOP 原理小总结 前言 版本约定 正文 Spring BeanFactory 容器初始化过程 IoC 的过程 bean 完整的创建流程如下 AOP 的过程 Annotation ...
- spring IOC和DI 理解
IOC(控制反转)和DI(依赖注入)是spring中的重要组成部分,下面是个人的一些理解,不代表官方. 1.IOC是什么? IOC:全名是Inversion of Controller 中文解释是控制 ...
- Spring:IoC和DI完成打印机打印详细说明过程及代码
Spring:IoC和DI完成打印机 课后作业 使用Spring的IoC.DI 装配一台打印机 纸张接口 实现 有: A4 A5 墨盒接口 实现 有:黑白 彩色 注解方式和非注解方式都要 说明:1.首 ...
- 关于RuoYi中Spring IOC、DI以及MVC不同注解的使用
1.什么是Spring IOC.DI? IOC(inverse of control)即"控制反转",DI(Dependence Injection)即"依赖注入&quo ...
最新文章
- json 数据类型简介
- golang之包和锁的机制
- 使用 icon 字体图标出现小方块问题
- 自建ELK迁移阿里云日志服务
- 怎么能把看不清的照片给看清_远视怎么矫正?需要佩戴眼镜吗?
- linux gst qt,【ARM-Linux开发】Gstreamer+QT+摄像头 编程总结
- 数据积分-牛顿科茨法与高斯勒让德法对比及示例
- Unity3d札记 --TanksTutorial收获与总结
- 电脑会在哪些地方暴露你的隐私
- gcc编译C++ 符号名解码 c++filt demangle
- windows删除文件时需要管理员权限的方法
- 如何设置html背景,如何给html设置背景
- Linux 下屏幕旋转
- 【Windows Server 2019】DHCP服务器配置与管理——安装和配置DHCP服务 Ⅱ
- 招商头条:北京市集中力量补齐5G产业短板;投资50亿元的格力成都产业园开工
- bat 脚本修改IE浏览器代理服务器
- Tarjan算法小结1——SCC
- IntelliJ IDEA Remote Development 使用体验
- 总结常用的Javafx功能及用法(上)
- Contract Coin (C-coin)4月12日全球正式上线
热门文章
- 一拖再拖,刁肥宅个人主页终上线!
- 项目管理进阶--软件开发项目中的团队组成
- ARM汇编指令—CPSR访问指令(mrsmsr)
- html页面计算圆的周长和面积,计算圆的周长和面积(VB)
- java GUL编程
- Linux-Apache服务器常规设置——用户个人主页
- Word域的应用和详解
- http://mirrors.aliyun.com/centos/7/os/x86_64/repodata/repomd.xml: [Errno 14] curl#6 - “Could not res
- 中国服务器审计系统,汉邦服务器监控与审计系统
- 计算机监控系统软件设计,计算机监控软件设计.doc