这篇博客写得稀烂,大家谨慎观看
你了解Spring IOC吗?
IOC(Inversion Of Control): 控制反转
- 它是Sprig Core最核心的部分,是Spring家族的基本.
- IOC是指由spring来负责控制对象的生命周期和对象间的关系.
- IOC不能算是一种技术,应该当做一种思想.
- 要了解IOC,我们需要先了解一下依赖注入(Dependency Injection)
DI(依赖注入)
含义: 把底层类作为参数传递给上层类,实现上层对下层的控制.
举例: 非DI思想设计行李箱
由图可知,行李箱依赖于箱体,箱体依赖于底盘,底盘依赖于轮子,当一切都完工之后,突然产品经理说轮子要改大一码
,那就崩了,底盘,箱体,行李箱是按照轮子来做的,轮子一改,全得改,凉凉!!!
用代码来演示上述过程中的依赖关系
这就是典型的上层建筑依赖下层建筑
倘若我们想使得轮胎的尺寸可以动态改变的话,就要下面改成这样
,红色的就是改动的地方,全都改了,崩了.
采用依赖注入的思想设计行李箱
我们先大概整出来箱子啥样,多大尺寸.
然后再去造箱体放进箱子里.
然后再去造底盘放进箱子里.
最后再去造轮子放进箱子里.
此时要改轮子就好说了嘛
这就是典型的下层建筑依赖上层建筑
IOC, DI, DL的关系
IOC可以通过DI/DL(依赖查找,已废弃)实现.
依赖注入的方式
- Setter
- Interface
- Constructor
- Annotation
依赖倒置原则,IOC,DI,IOC容器之间的关系
IOC容器的优势
- 避免了在各处使用new来创建类,并且可以做到统一维护,这些都交给容器解决.
- 创建实例的时候不需要了解其中的细节,
比如上面的造行李箱的例子,我们不需要知道怎么造的,经历了哪些东西,
它会直接返回给我们行李箱实例供我们使用. - IOC容器的工作流程图如下:
spring启动时会去读取容器中的bean配置信息,并在容器中生成一份相应的配置注册表
,然后根据这张注册表去实例化bean,同时装配好bean之间的依赖关系为上层提供准备就绪的运行环境.
spring提供了一个配置文件
描述bean以及bean之间的配置关系,利用反射功能实例化bean并建立bean之间的关系.
Spring IOC支持的功能
- 依赖注入
- 依赖检查
- 自动装配
- 支持集合
- 指定初始化方法和销毁方法
- 支持回调方法
Spring里的核心接口或者类
1. BeanDefinition接口
- 该接口主要是用来描述Bean的定义的,spring容器在启动的时候会将
xml
或者注解
里bean的定义解析成spring内部的BeanDefinition对象的形式.
2. BeanDefinitionRegistry接口
- 该接口提供向IOC容器注册BeanDefinition对象的方法.
3. BeanFactory接口
- 该接口提供了IOC的配置机制.
- 包含了bean的各种定义,便于实例化bean
- 还能在实例化bean之后建立bean之间的依赖关系.
- 该接口还能对bean的生命周期进行控制.
- 其体系结构如图:
4. ApplicationContext接口
- 该接口是BeanFactory的子接口之一.
- BeanFactory是Spring框架的基础设施,面向Spring,ApplicationContext面向使用Spring框架的开发者,
如果将spring容器比作一辆汽车,BeanFactory则是发动机,而ApplicationContext则是一辆完整的汽车
. - 该接口继承了BeanFactory接口: 所以它可以管理,装配Bean.
- 该接口继承了ReasourcePatternResolver接口: 所以它可以加载资源文件.
- 该接口继承了MessageSource接口: 所以它可以实现国际化等功能.
- 该接口继承了ApplicationEventPublisher接口: 所以它可以注册监听器,实现监听机制.