protectedvoidfinishRefresh(){// Clear context-level resource caches (such as ASM metadata from scanning).//清理缓存的资源clearResourceCaches();// Initialize lifecycle processor for this context.//初始化Spring 生命周期处理器initLifecycleProcessor();// Propagate refresh to lifecycle processor first.//启动声明周期处理器getLifecycleProcessor().onRefresh();// Publish the final event.//发布执行事件publishEvent(newContextRefreshedEvent(this));// Participate in LiveBeansView MBean, if active.LiveBeansView.registerApplicationContext(this);}
initLifecycleProcessor()方法
/**
* Initialize the LifecycleProcessor.
* Uses DefaultLifecycleProcessor if none defined in the context.
* @see org.springframework.context.support.DefaultLifecycleProcessor
* Spring的生命周期处理器
*/protectedvoidinitLifecycleProcessor(){ConfigurableListableBeanFactory beanFactory =getBeanFactory();//如果容器中已经存在 则直接赋值lifecycleProcessorif(beanFactory.containsLocalBean(LIFECYCLE_PROCESSOR_BEAN_NAME)){this.lifecycleProcessor =
beanFactory.getBean(LIFECYCLE_PROCESSOR_BEAN_NAME,LifecycleProcessor.class);if(logger.isTraceEnabled()){
logger.trace("Using LifecycleProcessor ["+this.lifecycleProcessor +"]");}}else{//注册默认实现DefaultLifecycleProcessorDefaultLifecycleProcessor defaultProcessor =newDefaultLifecycleProcessor();
defaultProcessor.setBeanFactory(beanFactory);//赋值给lifecycleProcessorthis.lifecycleProcessor = defaultProcessor;
beanFactory.registerSingleton(LIFECYCLE_PROCESSOR_BEAN_NAME,this.lifecycleProcessor);if(logger.isTraceEnabled()){
logger.trace("No '"+LIFECYCLE_PROCESSOR_BEAN_NAME+"' bean, using "+"["+this.lifecycleProcessor.getClass().getSimpleName()+"]");}}}