public void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { prepareRefresh();//准备启动spring容器,设置容器的启动日期和活动标志 ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();//获得容器ApplicationContext的子类BeanFactory。步骤如下:如果已经有了BeanFactory就销毁它里面的单例Bean并关闭这个BeanFactory。2.创建一个新的BeanFactory。3.对这个BeanFactory进行定制(customize),如allowBeanDefinitionOverriding,allowCircularReferences。4.转载BeanDefinitions(读取配置文件,将xml转换成对应得BeanDefinition)。5.检查是否同时启动了两个BeanFactory。 prepareBeanFactory(beanFactory);//配置BeanFactory(就是将ApplicationContext的一些属性配置到BeanFactory上吧)。这里做了很多事情,可以看看其源码,比较重要的如设置classLoader;将BeanPostProcess注册到BeanFactory里。 try { // Allows post-processing of the bean factory in context subclasses. postProcessBeanFactory(beanFactory); invokeBeanFactoryPostProcessors(beanFactory);//触发BeanFactoryPostProcessors registerBeanPostProcessors(beanFactory);//触发BeanPostProcessors // 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(); finishBeanFactoryInitialization(beanFactory);//初始化单例的Bean,并将其保存起来。 // Last step: publish corresponding event. finishRefresh(); } catch (BeansException ex) { // Destroy already created singletons to avoid dangling resources. beanFactory.destroySingletons(); // Reset 'active' flag. cancelRefresh(ex); // Propagate exception to caller. throw ex; } } }
相关推荐
### Spring源码refresh方法调试笔记 #### 一、概述 `refresh` 方法是Spring框架中的一个核心方法,它主要用于初始化整个应用上下文(ApplicationContext),包括加载配置文件、创建Bean实例等重要步骤。本文将深入...
refresh() 方法是定义在 AbstractApplicationContext 类中的,它的主要作用是刷新 ApplicationContext 对象,准备它用于 bean 的实例化和依赖注入。下面是 refresh() 方法的源代码: ```java public void refresh()...
2013-3-20 22:22:46 org.springframework.context.support.AbstractApplicationContext refresh 信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@c1f10e: display name [org....
Spring IOC 容器的启动流程是整个 Spring 框架的核心所在,本文将从 AbstractApplicationContext 的 refresh 方法开始,详细分析 Spring IOC 容器的启动流程。 在 Spring 框架中,ApplicationContext 是 IOC 容器的...
问题描述 用SpringBoot + Spring Data JPA操作数据库 项目启动的时候 报了一个错 SpringBoot的版本是2.2.6.RELEASE org.springframework.beans.factory.BeanCreationException: Error creating bean with name '...
然后,我们调用父类 AbstractApplicationContext 的 refresh() 方法,该方法采用模板方法的设计模式将加载 IoC 容器的流程列于其中。具体调用到的方法由其子类进行覆盖。 3. 加载 BeanFactory 在 ...
- 在 **AbstractApplicationContext** 中,**refresh** 方法首先调用 **obtainFreshBeanFactory** 和 **refreshBeanFactory** 方法来创建一个新的BeanFactory实例。 - **AbstractRefreshableApplicationContext** 的...
- **说明**:`refresh()` 方法是在构造函数中被调用的,其主要功能是加载配置文件,并根据这些配置文件创建Bean实例。 **3. obtainFreshBeanFactory() 方法** - **作用**:负责获取一个新的`BeanFactory`实例。 - ...
- 当我们使用`ClassPathXmlApplicationContext`构造函数时,例如`new ClassPathXmlApplicationContext("configLocation")`,它会调用`refresh()`方法来启动初始化流程。 - `refresh()`方法包含了获取或创建新的...
`refresh()`方法位于`AbstractApplicationContext`类中,它负责加载和刷新配置,以及初始化Bean工厂。在这个过程中,`refresh()`会调用`invokeBeanFactoryPostProcessors(beanFactory)`,目的是处理所有的`...
`refresh()`方法是AbstractApplicationContext的核心功能之一,它的主要任务是刷新IoC容器,确保每次启动或重新启动时都能得到一个新的、完整的容器实例。当调用`refresh()`时,会执行一系列的步骤来初始化和配置...
然后依次调用了 `start()`、`refresh()`、`stop()` 和 `close()` 方法来触发不同的事件。 #### 五、XML 配置文件解析 ```xml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context=...
AbstractApplicationContext.refresh(){ 1.为刷新准备此上下文 prepareRefresh(){ initPropertySources();//在上下文环境中初始化任何占位符属性源 getEnvironment().validateRequiredProperties();//验证所有...
调用`refresh()`方法,这是在`AbstractApplicationContext`类中定义的。此方法负责加载配置、创建Bean工厂以及启动事件监听器等。 3. **完成Bean工厂初始化**: 在`refresh()`方法内部,调用`...
n 源码分析-AbstractApplicationContext的refresh方法 n 源码分析-AbstractBeanFactory的doGetBean方法 l Spring Aop n 设计模式-代理模式 n 编程思想-AOP思想 n 基础应用-入门案例 n 基础应用-常用注解 n 高级应用-...
` private AbstractApplicationContext appContext;` ` public synchronized static AppContext getInstance() {` ` if (instance == null) {` ` instance = new AppContext();` ` }` ` return instance;` ` }` ` ...
自定义版本可以扩展Spring提供的`AbstractApplicationContext`,并覆盖其关键方法,如`refresh()`和`close()`,以适应特定的需求。 1. **初始化配置**: - 在`refresh()`方法中,我们需要加载XML配置文件。这可以...
此方法在检查`context`是否为`AbstractApplicationContext`的实例后,将其转换为`AbstractApplicationContext`并调用`refresh`方法。`AbstractApplicationContext`的`refresh`方法是一个同步代码块,确保在多线程...
- 最后一步是调用 `AbstractApplicationContext` 的 `refresh` 方法,完成整个容器的初始化。 - 在 `onRefresh()` 方法中,如果应用是 Web 应用,则会启动 Tomcat 等 Web 容器。 #### 八、关键组件解析 在给定的...