spring笔记-ioc容器 大概流程

1、spring框架
主要核心 ioc aop
Ioc: 控制反转
依赖注入
Ioc容器
在这里插入图片描述

1.1例子
1、婚姻介绍所等同于 spring ioc 容器
2、客户及spring用户
3、个性化需求 及xml或注解(beanDefinition定义 信息)
4、男 女 及 springioc中的bean

婚姻介绍所通过客户提供的个性化需求 创建符合要求的bean 返回给客户
在这里插入图片描述
1.2 refresh()流程图
在这里插入图片描述

1、通过bean定义信息到ioc容器Definition中获取bean
2、因为配置方法不同所以中间使用抽象方法读取配置信息beanDefinitionReader
3、beanDefinition 定义信息通过反射到beanFactory 中获取bean 实例化 赋值 初始化 得到bean对象
4、spring是一个生态圈基石 可以不断扩展
postProcessor 前置处理器 增强器
5、bean定义信息时可以 给beanFactory配置增强器
实例化 赋值时可以给bean配置增强器
aop就是在这里加入的 动态代理
aop 动态代理 实现 :cglib jdk
在这里插入图片描述

在这里插入图片描述
2、AbstractRefreshableApplicationContext中refresh()方法
在这里插入图片描述
第一步:创建beanFactory
2.1 准备工作PrepareRefresh()
在这里插入图片描述
设置启动时间 容器开关 创建当前容器的一些集合
在这里插入图片描述
2.2 创建工厂 obtainFreshBeanFactory() DefaultListableBeanFactory
创建容器对象:DefaultListableBeanFactory
加载xml配置文件的属性值到当前工厂中,最重要的就是BeanDefinition
在这里插入图片描述
refreshBeanFactory() 刷新bean工厂 当存在beanFactory 销毁 保证只有一个bean工厂
在这里插入图片描述
createBeanFactory()
在这里插入图片描述

创建一个bean工厂 supe父类的方法 双亲委派模式 先去查父类
在这里插入图片描述

2.3 prepareBeanFactory(beanFactory)
beanFactory的准备工作,对各种属性进行填充
在这里插入图片描述

2.4postProcessBeanFactory(beanFactory) 扩展 增强器
子类覆盖方法做额外的处理,此处我们自己一般不做任何扩展工作,但是可以查看web中的代码,是有具体实现的
在这里插入图片描述

2.5 invokeBeanFactoryPostProcessors(beanFactory) 执行 增强器
调用各种beanFactory处理器
2.6 registerBeanPostProcessors(beanFactory) 注册
实例化 注册 beanPostProcessors
在这里插入图片描述
2.7initMessageSource() 基本国际化功能 不重要
2.8 initApplicationEventMulticaster() 初始化事件监听器 多播器
在这里插入图片描述
2.9 onRefresh() 空的 留给子类来初始化其他的bean
2.10 registerListeners() 注册监听器
2.7~2.10和bean没啥太大影响 主要想完成不同阶段处理不同事情

2.11 finishBeanFactoryInitialization(beanFactory) 完成实例化
2.12 finishRefresh();
完成刷新过程,通知生命周期处理器lifecycleProcessor刷新过程,同时发出ContextRefreshEvent通知别人
2.13
通过反射 创建对象
重点 getBean()
doGetBean()
createBean() 循环依赖
doCreateBean() 创建bean对象
createBeanInstance() 没有特殊处理走 无参构造方法
获取构造器
populateBean() 填充属性 赋值
在这里插入图片描述

2.12 finishReFresh()

3.如何启动spring
组略步骤:

加载配置文件——》解析——》封装成beanDefinition对象——》实例化——》完整对象——》使用
在这里插入图片描述
获取 ApplitationContext对象
Object obj = applicationContext.getBean();

3.2详细步骤
beanDefinition:封装各种属性的一个对象
在容器加载bean的配置文件时因为 配置类型五花八门 (xml properties yml 注解 json)等 所以在封装成beanDefinition对象前 有个抽象类 来解析配置文件beanDefinitionReader

bean生命周期
实例化
初始化
填充属性 set方法 为空属性赋值
调用aware接口方法 (自定义容器 使用 spring容器)
beforebeanpostProcessor(什么都没做)
调用init方法
afterBeanPostProcessor (主要做了动态代理)
完整的bean
销毁过程
在这里插入图片描述spring容器按照使用可以分两类 自定义对象 和容器对象

总结:
1、创建容器
2、加载配置文件封装成beanDefinition
3、调用执行beanFactoryPostProcessor
准备工作
准备beanPostProcessor
准备监听器 广播器
4、实例化
5、初始化
6、获取完整bean对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值