refresh 是初始化spring 容器的入口
public void refresh() throws BeansException, IllegalStateException {
synchronized (this.startupShutdownMonitor) {
// Prepare this context for refreshing.
prepareRefresh();
// 创建beanFactory 并且完成BeanDefinition 的解析
ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
// Prepare the bean factory for use in this context.
prepareBeanFactory(beanFactory);
try {
// Allows post-processing of the bean factory in context subclasses.
postProcessBeanFactory(beanFactory);
// Invoke factory processors registered as beans in the context.
invokeBeanFactoryPostProcessors(beanFactory);
// Register bean processors that intercept bean creation.
registerBeanPostProcessors(beanFactory);
// Initialize message source for this context.
initMessageSource();
// Initialize event multicaster for this context.
initApplicationEventMulticaster();
// Initialize other special beans in specific context subclasses.
onRefresh();
// Check for listener beans and register them.
registerListeners();
// Instantiate all remaining (non-lazy-init) singletons.
finishBeanFactoryInitialization(beanFactory);
// Last step: publish corresponding event.
finishRefresh();
}
catch (BeansException ex) {
// Destroy already created singletons to avoid dangling resources.
destroyBeans();
// Reset 'active' flag.
cancelRefresh(ex);
// Propagate exception to caller.
throw ex;
}
}
}
相关推荐
### Spring源码refresh方法调试笔记 #### 一、概述 `refresh` 方法是Spring框架中的一个核心方法,它主要用于初始化整个应用上下文(ApplicationContext),包括加载配置文件、创建Bean实例等重要步骤。本文将深入...
问题描述 用SpringBoot + Spring Data JPA操作数据库 项目启动的时候 报了一个错 SpringBoot的版本是2.2.6.RELEASE org.springframework.beans.factory.BeanCreationException: Error creating bean with name '...
AbstractApplicationContext.refresh(){ 1.为刷新准备此上下文 prepareRefresh(){ initPropertySources();//在上下文环境中初始化任何占位符属性源 getEnvironment().validateRequiredProperties();//验证所有...
refresh() 方法是定义在 AbstractApplicationContext 类中的,它的主要作用是刷新 ApplicationContext 对象,准备它用于 bean 的实例化和依赖注入。下面是 refresh() 方法的源代码: ```java public void refresh()...
Spring IOC 容器的启动流程是整个 Spring 框架的核心所在,本文将从 AbstractApplicationContext 的 refresh 方法开始,详细分析 Spring IOC 容器的启动流程。 在 Spring 框架中,ApplicationContext 是 IOC 容器的...
2013-3-20 22:22:46 org.springframework.context.support.AbstractApplicationContext refresh 信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@c1f10e: display name [org....
然后,我们调用父类 AbstractApplicationContext 的 refresh() 方法,该方法采用模板方法的设计模式将加载 IoC 容器的流程列于其中。具体调用到的方法由其子类进行覆盖。 3. 加载 BeanFactory 在 ...
- 在 **AbstractApplicationContext** 中,**refresh** 方法首先调用 **obtainFreshBeanFactory** 和 **refreshBeanFactory** 方法来创建一个新的BeanFactory实例。 - **AbstractRefreshableApplicationContext** 的...
3. `AbstractApplicationContext.refresh`刷新容器,加载并解析配置文件。 4. `AbstractRefreshableApplicationContext.refreshBeanFactory`刷新Bean工厂。 5. `AbstractXmlApplicationContext.loadBeanDefinitions`...
n 源码分析-AbstractApplicationContext的refresh方法 n 源码分析-AbstractBeanFactory的doGetBean方法 l Spring Aop n 设计模式-代理模式 n 编程思想-AOP思想 n 基础应用-入门案例 n 基础应用-常用注解 n 高级应用-...
`refresh()`方法是AbstractApplicationContext的核心功能之一,它的主要任务是刷新IoC容器,确保每次启动或重新启动时都能得到一个新的、完整的容器实例。当调用`refresh()`时,会执行一系列的步骤来初始化和配置...
Spring框架是Java开发中最常用的企业级应用框架之一,它提供了一种轻量级的容器管理方式,使得开发者可以更轻松地进行依赖注入(Dependency Injection, DI)和面向切面编程(Aspect Oriented Programming, AOP)。...
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:381) at org.springframework.web.context.support.AbstractRefreshableWebApplicationContext....
- `AbstractApplicationContext`是ApplicationContext接口的主要实现,它负责管理bean的生命周期,以及处理事件和消息源。 - `AbstractRefreshableApplicationContext`进一步扩展了`AbstractApplicationContext`,...
此方法在检查`context`是否为`AbstractApplicationContext`的实例后,将其转换为`AbstractApplicationContext`并调用`refresh`方法。`AbstractApplicationContext`的`refresh`方法是一个同步代码块,确保在多线程...
`refresh()`方法位于`AbstractApplicationContext`类中,它负责加载和刷新配置,以及初始化Bean工厂。在这个过程中,`refresh()`会调用`invokeBeanFactoryPostProcessors(beanFactory)`,目的是处理所有的`...
自定义版本可以扩展Spring提供的`AbstractApplicationContext`,并覆盖其关键方法,如`refresh()`和`close()`,以适应特定的需求。 1. **初始化配置**: - 在`refresh()`方法中,我们需要加载XML配置文件。这可以...
其中,依赖注入是 Spring 最为核心的功能之一,它通过 IoC 容器来管理对象的生命周期和依赖关系。Spring 支持多种类型的 IoC 容器,包括 `BeanFactory` 和 `ApplicationContext`。 #### 二、...
课程还会涵盖Spring容器的初始化流程,包括`AbstractApplicationContext`的`refresh()`方法,这是Spring应用上下文启动的关键。在web环境中,通常由`ContextLoaderListener`监听器来触发这个过程。 总的来说,本...