refresh容器刷新方法 1、prepareRefresh 调用容器准备刷新的方法,获取容器的当前时间,给容器设置同步标识 2、obtainFreshBeanFactory 返回beanFactory实例 1、子类实现启动refreshBeanFactory 2、继承父类GenericApplicationContext构造方法中new DefaultListableBeanFactory()创建beanFactory实例。 3、prepareBeanFactory(beanFactory) 为BeanFactory配置容器特性,如类加载器,事件处理器等 4、postProcessBeanFactory(beanFactory) 容器的某些子类自动特殊的BeanPost事件处理器 5、invokeBeanFactoryPostProcessors(beanFactory) 调用所有的注册BeanFactoryPostProcessor的Bean 6、registerBeanPostProcessors(beanFactory) 为BeanFactroy注册BeanPost事件处理器 7、initMessageSource() 初始化信息源和国际化相关内容 8、initApplicationEventMulticaster() 初始化容器事件多播器 9、onRefresh() 调用子类的某些特殊Bean初始化方法 10、registerListeners() 为事件多播器注册事件监听器 11、finishBeanFactoryInitialization(beanFactory) 初始化所有剩余的单实例Bean 12、finishRefresh() 初始化容器的生命周期事件处理器,并发表容器的生命周期事件 1、clearResourceCaches() 清理资源缓存 2、initLifecycleProcessor() 初始化生命周期事件处理器 3、getLifecycleProcessor().onRefresh() 调用生命事件处理器的refresh方法 4、发布ContextRefreshedEvent 容器刷新事件 5、LiveBeansView.registerApplicationContext(this) 将容器add到LiveBeansView registerMBean 有一套JDK级别的对外的服务接口
AnnotationConfigApplicationContext容器刷新源码分析二
于 2022-01-10 21:09:21 首次发布