Spring IOC时序图源码

源码入口

读取需要扫描的资源路径

  1. ClassPathXmlApplicationContext方法中 去解析资源文件路径 此方法是setConfigLocations();
    在这里插入图片描述

  2. 解析完资源路径之后 会去 调用刷新容器的方法 refresh 此方法也是去装配容器需要的处理事务 还有属性之类的此方法中概括所有ioc容器的处理 过程 有11个方法

     1:prepareRefresh() 调用容器准备刷新的方法,获取容器的时间,并且设置表示
     
     2:ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory(); 
     此方法是告诉refreshBeanFoctry方法,Bean定义的资源文件从子类refreshBeanFoctry加载进来
     
     3:prepareBeanFactory(beanFactory); 为bean配置容器的特性,如:事件处理器 ,类加载器
     
     4:postProcessBeanFactory(beanFactory);为容器某些子类提供特殊的BeanPost事件(aop)
     
     5:invokeBeanFactoryPostProcessors(beanFactory); 调用所有注册的eanFactoryPostProcessors的Bean
     
     6:registerBeanPostProcessors(beanFactory); 后置通知 用来监听容器触发的事件
     
     7:initMessageSource(); 初始化信息源,和国际化相关
     
     8:initApplicationEventMulticaster() 初始化容器时间传播器
     
     9:onRefresh()调用子类的某些特殊Bean初始化方法
     
     10:registerListeners(); 为传播事件做监听器
     
     11:finishBeanFactoryInitialization 初始化剩下的单例bean
     
     12: finishRefresh初始化容器的生命周期事件处理器,并且发布容器的生命周期
     
     13:如果抛出异常就销毁已创建的Bean 取消refresh 操作 重置容器
     
     14: 无论成功与否必须需要 释放公共资源
    

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
3. 点击看obtainFreshBeanFactory方法 主要是关注 refreshBeanFactory()
在这里插入图片描述

  1. 在refreshBeanFactory方法中主要的方法是loadBeanDefinitions 加载bean
    在这里插入图片描述

  2. loadBeanDefinitions方法中最重要的方法是doLoadBeanDefinitions读取Bean的过程
    在这里插入图片描述

  3. doLoadBeanDefinitions这个方法 是在XmlBeanDefinitionReader类中 此方法是把XML文件转换成 DOM对象 解析方法 然后去对Bean定义和解析 把xml文件转成DOM对象的主要方法是doLoadDocument() 启动对Bean定义和解析的方法是registerBeanDefinitions
    在这里插入图片描述

  4. XmlBeanDefinitionReader类中的registerBeanDefinitions继续调用了BeanDefinitionDocumentReader接口的registerBeanDefinitions方法 具体的解析实现过程有实现类DefaultBeanDefinitionDocumentReader完成
    在这里插入图片描述

  5. DefaultBeanDefinitionDocumentReader 实现类中的 registerBeanDefinitions方法 中doRegisterBeanDefinitions(root); 方法 定义规则Bean定义doucment对象 载入元素 其中parseBeanDefinitions()是把配置文件给解析载入到Bean中
    在这里插入图片描述

  6. parseBeanDefinitions 此方法根据xml命名 来去做不同的处理 调用parseDefaultElement方法去适配不同元素的节点 这里我们用processBeanDefinition方法举例子也是最常用的
    在这里插入图片描述

  7. 在processBeanDefinition(解析Bean定义资源doucment对象的普通元素)方法中 BeanDefinitionReaderUtils.registerBeanDefinition 此方法向spring IOC容器注册解析得到Bean定义,这是Bean像IOC容器的注册入口
    在这里插入图片描述

  8. registerBeanDefinition此方法将解析的BeanDefinitionHold注册到容器中 此方法把BeanDefinition存入一个map中 key是BeanDefinitionHold的里面的name 也是BeanName 。Value就是BeanDefinitionHold里面的BeanDefinition
    在这里插入图片描述

  9. 总体概括三个步骤 定位 加载 注册

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值