spring-atguigu-启动流程---44-51

梳理下spring创建和初始化的整个过程:

第一步:

AnnotationConfigApplicationContext annotationConfigApplicationContext =
                new AnnotationConfigApplicationContext(AppConfig.class);

第二步:

public AnnotationConfigApplicationContext(Class<?>... annotatedClasses) {
		this();
		register(annotatedClasses);
		refresh();
	}

第三步:

@Override
	public void refresh() throws BeansException, IllegalStateException {
		synchronized (this.startupShutdownMonitor) {
			// 第一步:刷新的预处理工作
			prepareRefresh();

			// 第二步:获取BeanFactory
			ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();

			// 第三步:BeanFactory的预处理设置 一些后置处理器什么的
			prepareBeanFactory(beanFactory);

			try {
				// 第四步:后置处理工作 子类重写这个方法进行设置 我们可以自己实现自己的后置处理器
				postProcessBeanFactory(beanFactory);

				// 第五步:激活后置处理器
				invokeBeanFactoryPostProcessors(beanFactory);

				// 第六步:注册 拦截Bean创建的 Bean处理器,这里只是注册,真正的调用是在getBean时候
				registerBeanPostProcessors(beanFactory);

				// 第七步:为上下文初始化Message消息资源,即不同语言的消息体,国际化处理
				initMessageSource();

				// 第八步:初始化应用消息广播器,并放入"applicationEventMulticaster"bean中,与Spring的事件监听有关
				initApplicationEventMulticaster();

				// 第九步:留给子容器,初始化剩下的bean,默认是空的
				onRefresh();

				// 第十步:初始化所有的单实例bean
				registerListeners();

				// 
				finishBeanFactoryInitialization(beanFactory);

				// 
				finishRefresh();
			}

			catch (BeansException ex) {
				if (logger.isWarnEnabled()) {
					logger.warn("Exception encountered during context initialization - " +
							"cancelling refresh attempt: " + ex);
				}

				// 
				destroyBeans();

				// 
				cancelRefresh(ex);

				// Propagate exception to caller.
				throw ex;
			}

			finally {
				// Reset common introspection caches in Spring's core, since we
				// might not ever need metadata for singleton beans anymore...
				resetCommonCaches();
			}
		}
	}

-----------------------------44-----------------------------

这一步:

// 
invokeBeanFactoryPostProcessors(beanFactory);

进入这个方法:invokeBeanFactoryPostProcessors

在容器中找到所有的后置处理器,遍历。

执行后置处理器的方法。有优先级的排序执行。

-----------------------------45-----------------------------

第六步:后置处理器都是有优先级的。

前六步只是在BeanFactory保存了后置处理器。

-----------------------------46-----------------------------

第七步:

-----------------------------47-----------------------------

第八步:

第九步:

第10步:

初始化所有的单实例bean。

-----------------------------48-----------------------------

我们主要看下这个步骤。

。。。。。。

-----------------------------49-----------------------------

-----------------------------50-----------------------------

-----------------------------51-----------------------------

发布了374 篇原创文章 · 获赞 12 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_28764557/article/details/104743912