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

  • 相关阅读:
    火山引擎 DataLeap:一家企业,数据体系要怎么搭建?
    商铺分类介绍
    ChatGPT写作术:高效撰写顶级论文
    OWASP Top 10漏洞解析(1)- A1:Broken Access Control 访问控制失效
    数据结构题型16-线索二叉树
    java中的clone方法
    django rest framework框架中用到的组件
    SOLIDWORKS二次开发——拓展设计能力与定制化解决方案
    数据库分库分表的原则
    springboot如何集成mybatis呢?
  • 原文地址:https://blog.csdn.net/weixin_44019875/article/details/126229976