spring容器的初始化
2022-06-29 21:37:18 3 举报
spring容器的初始化
作者其他创作
大纲/内容
初始化当前ApplicationContext事件广播器
this.loadBeanDefinitions(beanFactory);// 加载 Bean 到 BeanFactory 中這個方法就是把配置文件的所有参数解析到beanDefintion,然后再注册进beanDefintionMap
// 注册事件监听器,监听器需要实现 ApplicationListener 接口
准备工作,记录下容器的启动时间、标记“已启动”状态、处理配置文件中的占位符
将ApplicationListenerDerector事件监听器处理器和ApplicationContextAwareProcessorc放进beanFactoryPostProcessors(beanFactory的属性)
createBean()
// 最后,广播事件,ApplicationContext 初始化完成
// 这里是提供给子类的扩展点,到这里的时候,所有的 Bean 都加载、注册完成了,但是都还没有初始化 // 具体的子类可以在这步的时候添加一些特殊的 BeanFactoryPostProcessor 的实现类或做点什么事
postProcessBeanFactory(beanFactory);
注册“environment”、\"systemProperties\"、\"systemEnvironment\"三个特殊的bean,作用待研究
initizeBean()很重要处理各种回调
populateBean()bean属性注入
ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
registerListeners();
this.refreshBeanFactory();
prepareRefresh()
解析一个个bean定义,注册到beanFactory,bean还未初始化,只是配置信息提取出来了,也就是将这些信息保存到了注册中心(beanName->beanDefinition的map)这就是实例化,但没有注入值
registerBeanPostProcessors(beanFactory);
一个知识点:也就是<bean/>会对应一个BeanDefintionHolder<jsf provider />也会有一个JsfProviderHolder来处理或者接受jsf.xml里面的参数
doCreateBean()
refresh()函数
国际化相关不看
getBean()
finishRefresh();
finishBeanFactoryInitialization(beanFactory)
// 重点,重点,重点 // 初始化所有的 singleton beans //(lazy-init 的除外)
// 设置 BeanFactory 的类加载器,添加几个 BeanPostProcessor,手动注册几个特殊的 bean // 这块待会会展开说
// 具体的子类可以在这里初始化一些特殊的 Bean(在初始化 singleton beans 之前)
onRefresh();
createBeanInstance()创建Bean实例
prepareBeanFactory(beanFactory);
Invoke factory processors registered as beans in the context调用在上下文中注册为 bean 的工厂处理器
注册BeanPostProcessor的实现类
这个功能在abstractApplicationContext中并没有实现,故意留给子类去实现:https://blog.csdn.net/perfect_red/article/details/85179596
this.customizeBeanFactory(beanFactory);设置 BeanFactory 的两个配置属性:是否允许 Bean 覆盖、是否允许循环引用
initMessageSource();
invokeBeanFactoryPostProcessors(beanFactory);
spring容器初始化过程
return this.getBeanFactory();
initApplicationEventMulticaster();
收藏
0 条评论
下一页