提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录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个方法
步骤2-6是创建并准备beanFactory对象
步骤7-12是完善applicationContext的其他功能
步骤11是创建非懒加载的单例对象 1.prepareRefresh()
前置准备,做容器刷新前的准备工作
设置容器的启动时间设置活跃状态为true设置关闭状态为false获取Environment对象,并加载当前系统的属性值到Environment对象中准备监听器和事件的集合对象,默认为空的集合2.obtainFreshBeanFactory(); 创建容器对象: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通知别人