protectedvoidfinishRefresh(){// Initialize lifecycle processor for this context.// 初始化和生命周期有关的后置处理器;LifecycleProcessor默认从容器中找是否有lifecycleProcessor的组件【LifecycleProcessor】;如果没有new DefaultLifecycleProcessor();加入到容器; // 写一个LifecycleProcessor的实现类,可以在BeanFactory// void onRefresh();// void onClose(); initLifecycleProcessor();// Propagate refresh to lifecycle processor first.// 拿到前面定义的生命周期处理器(BeanFactory);回调onRefresh();getLifecycleProcessor().onRefresh();// Publish the final event.// 发布容器刷新完成事件publishEvent(newContextRefreshedEvent(this));// Participate in LiveBeansView MBean, if active.
LiveBeansView.registerApplicationContext(this);}
initLifecycleProcessor
protectedvoidinitLifecycleProcessor(){
ConfigurableListableBeanFactory beanFactory =getBeanFactory();// 1.判断BeanFactory是否已经存在生命周期处理器(固定使用beanName=lifecycleProcessor)if(beanFactory.containsLocalBean(LIFECYCLE_PROCESSOR_BEAN_NAME)){// 1.1 如果已经存在,则将该bean赋值给lifecycleProcessorthis.lifecycleProcessor =
beanFactory.getBean(LIFECYCLE_PROCESSOR_BEAN_NAME, LifecycleProcessor.class);if(logger.isDebugEnabled()){
logger.debug("Using LifecycleProcessor ["+this.lifecycleProcessor +"]");}}else{// 1.2 如果不存在,则使用DefaultLifecycleProcessor
DefaultLifecycleProcessor defaultProcessor =newDefaultLifecycleProcessor();
defaultProcessor.setBeanFactory(beanFactory);this.lifecycleProcessor = defaultProcessor;// 并将DefaultLifecycleProcessor作为默认的生命周期处理器,注册到BeanFactory中
beanFactory.registerSingleton(LIFECYCLE_PROCESSOR_BEAN_NAME,this.lifecycleProcessor);if(logger.isDebugEnabled()){
logger.debug("Unable to locate LifecycleProcessor with name '"+
LIFECYCLE_PROCESSOR_BEAN_NAME +"': using default ["+this.lifecycleProcessor +"]");}}}