• 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对象

  • 相关阅读:
    Linux【基本指令】
    DTSE Tech Talk | 第11期:深入浅出畅谈华为云低时延直播技术
    点云cloudpoint生成octomap的OcTree的两种方法以及rviz可视化
    windows访问服务器notebook(附pycharm)
    零基础自学SQL课程 | SQL中的日期函数大全
    202211103-STM8S103F3P6无法下载程序报30200、30004、30006等错误的排查方案
    C语言中文网 - Shell脚本 - 1
    在 SQL Server 中查找活动连接和死锁
    护眼灯什么颜色的灯光好?2022年平价护眼台灯推荐
    Python装饰器与面向切面编程
  • 原文地址:https://blog.csdn.net/weixin_44019875/article/details/126229976