refreshContext 函数
refresh(context); //1、 刷新上下文环境,加载对应的实例信息
if (this.registerShutdownHook) {
try {
context.registerShutdownHook(); //注册钩子函数,当shutdown时,执行。
}
catch (AccessControlException ex) {
// Not allowed in some environments.
}
}
1、 刷新上下文环境,加载对应的实例信息
2、注册钩子函数,当shutdown时,执行。
refresh 函数
主要进行Spring Bean相关的实例化。
//进行一些刷新前的准备信息,如设置active=true,校验必须的参数等
prepareRefresh();
//获取对应的BeanFactory
ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
//BeanFactory设置一些初始化的Bean实例信息
prepareBeanFactory(beanFactory);
try {
// Allows post-processing of the bean factory in context subclasses.
postProcessBeanFactory(beanFactory);
// 执行BeanFactoryPostProcessors,例如对Bean的定义进行一些处理
invokeBeanFactoryPostProcessors(beanFactory);
//注册BeanPostProcessors
registerBeanPostProcessors(beanFactory);
// Initialize message source for this context.
initMessageSource();
// 初始化ApplicationEventMulticaster
initApplicationEventMulticaster();
// 创建webServer等
onRefresh();
// 注册监听器
registerListeners();
// 初始化所有的 (non-lazy-init) 单例.
finishBeanFactoryInitialization(beanFactory);
// 发布刷新完成事件,清除资源换成,启动web容器
finishRefresh();
}