refresh()
关键的方法为:finishBeanFactoryInitialization(beanFactory);
创建所有非懒加载的单例 Bean,确保它们在上下文刷新后可用
- 在此方法下面
关键的方法为:beanFactory.preInstantiateSingletons()
;-
实例化所有剩余的(非懒加载)单例 Bean
- 在此方法下面关键的方法便是(代码行为下述代码的214行):getBean(beanName)
-
直接获取非工厂 Bean 的实例
- getBean(beanName)方法中,下一步是调用doGetBean()这个方法,该方法下面有一个createBean的方法,截图如下,之后进入创建 Bean 的逻辑
- getBean(beanName)方法中,下一步是调用doGetBean()这个方法,该方法下面有一个createBean的方法,截图如下,之后进入创建 Bean 的逻辑
-
- 在此方法下面关键的方法便是(代码行为下述代码的214行):getBean(beanName)
-
public void refresh() throws BeansException, IllegalStateException {
// 同步控制,确保在刷新上下文时的线程安全
synchronized (this.startupShutdownMonitor) {
// 记录上下文刷新过程的启动时间
StartupStep contextRefresh = this.applicationStartup.start("spring.context.refresh");
// 准备上下文进行刷新
prepareRefresh();
// 获取一个新的、干净的 BeanFactory 实例
ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
// 对 BeanFactory 进行配置和初始化
prepareBeanFactory(beanFactory);
try {
// 允许子类对 BeanFactory 进行后处理,通常用于添加自定义的 BeanPostProcessor
postProcessBeanFactory(beanFactory);
// 记录 BeanFactory 后处理的启动时间
St