文章目录
前言
本文以Web项目中创建的Spring容器为切入点,记述WebApplicationContext的初始化过程。 Spring版本4.3.18.RELEASE。一、初始化入口
在基于Servlet+Spring的Web项目开发中,若未指定WebApplicationContext的实现类,将以XmlWebApplicationContext作为Spring容器的默认实现类。在Spring的ContextLoaderListener#contextInitialized或DispatcherServlet#init方法中,创建XmlWebApplicationContext实例后,都会调用#refresh方法来对Spring容器进行初始化。
抽象类AbstractApplicationContext#refresh方法,是Spring ApplicationContext的初始化入口。
二、#refresh方法简介
#refresh方法来org.springframework.context.ConfigurableApplicationContext接口。
ConfigurableApplicationContext接口
ConfigurableApplicationContext接口对ApplicationContext接口进行了扩展,提供了更多的配置ApplicationContext的方法。
接口定义源码如下:
/**
* SPI interface to be implemented by most if not all application contexts.
* Provides facilities to configure an application context in addition
* to the application context client methods in the
* {@link org.springframework.context.ApplicationContext} interface.
*
* <p>Configuration and lifecycle methods are encapsulated here to avoid
* making them obvious to ApplicationContext client code. The present
* methods should only be used by startup and shutdown code.
*
* @author Juergen Hoeller
* @author Chris Beams
* @since 03.11.2003
*/
public interface ConfigurableApplicationContext extends ApplicationContext, Lifecycle, Closeable {
...
}
#refresh方法
#refresh方法是ApplicationContext的启动方法,用于加载或刷新ApplicationContext配置。
#refresh源码如下:
/**
* Load or refresh the persistent representation of the configuration,
* which might an XML file, properties file, or relational database schema.
* <p>As this is a startup method, it should destroy already created singletons
* if it fails, to avoid dangling resources. In other words, a