提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录debug spring流程概述
1.启动类:ClassPathXmlApplicationContext2.ClassPathXmlApplicationContext
调用父类构造方法,进行相关的对象创建等 *** 作,包含属性的赋值 *** 作 refresh()方法
重要的refresh中的12个方法 步骤1.prepareRefresh()2.obtainFreshBeanFactory();
createBeanFactory----创建bean工厂**==new 一个 DefaultListableBeanFactory==** ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210505175837575.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODA1MjE2MQ==,size_16,color_FFFFFF,t_70)loadBeanDefinitions--加载bean的定义信息 **==加载bean的定义信息==** ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210505180822832.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODA1MjE2MQ==,size_16,color_FFFFFF,t_70)3.prepareBeanFactory4.postProcessBeanFactory
留给子类做扩展用的方法 5.invokeBeanFactoryPostProcessors
执行==BeanFactoryPostProcessor== 执行器 6.registerBeanPostProcessors7.initMessageSource8.initApplicationEventMulticaster9.onRefresh10.registerListeners
观察者模式--Observer 11.==finishBeanFactoryInitialization==12. finishRefresh 总结
debug spring流程概述
构造方法
调用父类构造方法,进行相关的对象创建等 *** 作,包含属性的赋值 *** 作
进入refresh()
重要的refresh中的12个方法
- prepareRefreshobtainFreshBeanFactoryprepareBeanFactorypostProcessBeanFactoryinvokeBeanFactoryPostProcessorsregisterBeanPostProcessorsinitMessageSourceinitApplicationEventMulticasteronRefreshregisterListenersfinishBeanFactoryInitializationfinishRefresh
步骤2-6是创建并准备beanFactory对象
步骤7-12是完善applicationContext的其他功能
步骤11是创建非懒加载的单例对象
前置准备,做容器刷新前的准备工作
- 设置容器的启动时间设置活跃状态为true设置关闭状态为false获取Environment对象,并加载当前系统的属性值到Environment对象中准备监听器和事件的集合对象,默认为空的集合
- 创建容器对象:DefaultListableBeanFactory加载xml配置文件的属性值到当前工厂中,最重要的就是BeanDefinition
new 一个 DefaultListableBeanFactoryDefaultListableBeanFactory
为了序列化指定id,可以从id反序列化到beanFactory对象
定制beanFactory,设置相关属性,包括是否允许覆盖同名称的不同定义的对象以及循环依赖
加载bean的定义信息beandefinitionMap
一路返回到 3.AbstractApplicationContext
beanFactory的准备工作,对各种属性进行填充
留给子类做扩展用的方法5.invokeBeanFactoryPostProcessors
调用各种beanFactory处理器
执行BeanFactoryPostProcessor 执行器
注册bean处理器,这里只是注册功能,真正调用的是getBean方法
实例化并且注册所有的beanPostProcessor
为上下文初始化message源,即不同语言的消息体,国际化处理
初始化事件监听多路广播器
留给子类来初始化其他的bean
遍历应用程序中存在的监听器集合,并将对应的监听器添加到监听器的多路广播器中
观察者模式–Observer
初始化剩下的单实例(非懒加载的)
完成刷新过程,通知生命周期处理器lifecycleProcessor刷新过程,同时发出ContextRefreshEvent通知别人
- prepareRefresh:准备好环境变量,配置变量obtainFreshBeanFactory:创建或获取bean工厂,并加载BeanDefinitionprepareBeanFactory:beanFactory的准备工作,对各种属性进行填充postProcessBeanFactory:留给子类子类去扩展bean工厂invokeBeanFactoryPostProcessors:自定义beanFactory后置处理器去扩展bean工厂registerBeanPostProcessors:注册bean后置处理器initMessageSource:为spring容器提供国际化功能initApplicationEventMulticaster:为spring容器提供事件发布器onRefresh:留给子类对spring容器进行扩展registerListeners:为spring容器注册监听器finishBeanFactoryInitialization:初始化剩余的非懒加载单例bean,执行bean后置处理器扩展finishRefresh:准备spring容器生命周期管理器,发布contextRefreshed事件
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)