jsp网站开发实例视频教程,建各公司网站要多少钱,在线留电话的广告,网站设计 西安上一篇我们一起学习了【spring】FileSystemXmlApplicationContext 类学习
AbstractApplicationContext 的refresh() 方法介绍
AbstractApplicationContext的refresh()方法仍然是整个Spring应用程序上下文初始化的核心流程入口。大体上的刷新生命周期依然保持一致。
refresh(… 上一篇我们一起学习了【spring】FileSystemXmlApplicationContext 类学习
AbstractApplicationContext 的refresh() 方法介绍
AbstractApplicationContext的refresh()方法仍然是整个Spring应用程序上下文初始化的核心流程入口。大体上的刷新生命周期依然保持一致。
refresh() 方法的执行流程是一个复杂的过程它涉及到多个方法的调用和多个步骤的执行。在实际开发中我们通常不需要直接调用 refresh() 方法而是通过调用 AbstractApplicationContext 类的子类的 refresh() 方法来刷新应用上下文。
源码截图
注释后的源码 public void refresh() throws BeansException, IllegalStateException {synchronized (this.startupShutdownMonitor) {// 调用容器准备刷新获取容器的当前时间同时给容器设置同步标识prepareRefresh();// 告诉子类启动 refreshBeanFactory() 方法BeanDefinition 资源文件的载入从子类的 refreshBeanFactory() 方法启动开始ConfigurableListableBeanFactory beanFactory obtainFreshBeanFactory();// 为 BeanFactory 配置容器特性例如类加载器、事件处理器等prepareBeanFactory(beanFactory);try {// 为容器的某些子类指定特殊的 BeanPost 事件处理器postProcessBeanFactory(beanFactory);// 调用所有注册的 BeanFactoryPostProcessor 的 BeaninvokeBeanFactoryPostProcessors(beanFactory);// 为 BeanFactory 注册 BeanPost 事件处理器.// BeanPostProcessor 是 Bean 后置处理器用于监听容器触发的事件registerBeanPostProcessors(beanFactory);// 初始化信息源和国际化相关.initMessageSource();// 初始化容器事件传播器initApplicationEventMulticaster();// 调用子类的某些特殊 Bean 初始化方法onRefresh();// 为事件传播器注册事件监听器.registerListeners();// 初始化 Bean并对 lazy-init 属性进行处理finishBeanFactoryInitialization(beanFactory);// 初始化容器的生命周期事件处理器并发布容器的生命周期事件finishRefresh();}catch (BeansException ex) {// 销毁以创建的单态 BeandestroyBeans();// 取消 refresh 操作重置容器的同步标识.cancelRefresh(ex);throw ex;}}
} 对上面代码的解释 prepareRefresh()做一些刷新前的准备工作例如设置启动时间戳等。 obtainFreshBeanFactory()获取或创建一个新的ConfigurableListableBeanFactory它是Spring容器的基础用于存储和管理Bean的定义与实例。 prepareBeanFactory(beanFactory)对BeanFactory进行必要的配置包括设置默认属性、添加系统属性以及设置类加载器等。 postProcessBeanFactory(beanFactory)允许子类对BeanFactory进行额外的后期处理。 invokeBeanFactoryPostProcessors(beanFactory)调用BeanFactory后处理器它们可以修改BeanDefinition对象影响容器内Bean的定义和初始化。 registerBeanPostProcessors(beanFactory)注册Bean后处理器这些处理器可以在Bean实例化前后进行拦截处理。 initMessageSource() 和 initApplicationEventMulticaster()分别初始化国际化消息源和应用事件广播器。 onRefresh()提供给子类覆盖以便在刷新过程中执行特定的初始化动作。 registerListeners()注册监听器这些监听器会在容器中监听特定的事件。 finishBeanFactoryInitialization(beanFactory)完成剩余所有非懒加载的单例Bean的初始化工作。 finishRefresh()刷新过程的最后阶段发布一个ContextRefreshedEvent事件表示ApplicationContext已完成刷新并且所有Bean都已准备好使用。