XmlWebApplicationContext是spring在web应用中的context,
在ContextLoaderListener或ContextLoaderServlet中完成了初步的设置。
XmlWebApplicationContext跟其他的applicationContext(FileSystem,Classpath)一样,是AbstractApplicationContext的一个子类。
applicationContext的refresh过程是线程同步的。
如下:
synchronized (this.startupShutdownMonitor)
方法1
prepareRefresh(); //设定起始时间,并设置active标记
方法2
// 通知子类完成BeanFactory的创建。
ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
protected ConfigurableListableBeanFactory obtainFreshBeanFactory() {
refreshBeanFactory();
ConfigurableListableBeanFactory beanFactory = getBeanFactory();
if (logger.isDebugEnabled()) {
logger.debug("Bean factory for " + getDisplayName() + ": " + beanFactory);
}
return beanFactory;
}
refreshBeanFactory 在AbstractRefreshableApplicationContext(是XmlWebApplicationContext的父类)中进行了实现。创建了DefaultListableBeanFactory,随后执行
loadBeanDefinitions(beanFactory);这个是在XmlWebApplicationContext中进行了实现。
protected void loadBeanDefinitions(DefaultListableBeanFactory beanFactory) throws BeansException, IOException {
// Create a new XmlBeanDefinitionReader for the given BeanFactory.
XmlBeanDefinitionReader beanDefinitionReader = new XmlBeanDefinitionReader(beanFactory);
// Configure the bean definition reader with this context's
// resource loading environment.
beanDefinitionReader.setResourceLoader(this);
beanDefinitionReader.setEntityResolver(new ResourceEntityResolver(this));
// Allow a subclass to provide custom initialization of the reader,
// then proceed with actually loading the bean definitions.
initBeanDefinitionReader(beanDefinitionReader);
loadBeanDefinitions(beanDefinitionReader);
}
该方法中的beanDefinitionReader完成了WEB-INF/applicationContext.xml(可指定contextConfigLoaction的值,可使用,; \t\n指定多个applicationContext.xml文件)的加载
// 上面浅黄色的方法如下
protected void loadBeanDefinitions(XmlBeanDefinitionReader reader) throws IOException {
String[] configLocations = getConfigLocations();
if (configLocations != null) {
for (String configLocation : configLocations) {
reader.loadBeanDefinitions(configLocation);// 完成所有applicationContext.xml的加载
}
}
}
具体的xmlreader的装载再以后详细阅读。继续分析xmlwebApplicationContext的refresh过程。
方法3
prepareBeanFactory(beanFactory);
部分代码:
beanFactory.setBeanClassLoader(getClassLoader()); //设定类加载器
// 设定spring的EL解决器
beanFactory.setBeanExpressionResolver(new StandardBeanExpressionResolver());
beanFactory.addPropertyEditorRegistrar(new ResourceEditorRegistrar(this));
代码复杂,慢慢研究:
// 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();
文章出自:http://hi.baidu.com/yuanyuan1027/blog/item/9727c9dfd04d4a5995ee3723.html
分享到:
相关推荐
### Spring七大功能详解 #### 一、核心容器(Spring Core) **核心容器**提供了Spring框架的基础功能,通过Bean的方式组织和管理Java应用中的各种组件及其之间的关系。在Spring框架中,Bean Factory扮演着核心角色...
org.springframework.web.context.support.XmlWebApplicationContext.class org.springframework.web.filter.AbstractRequestLoggingFilter.class org.springframework.web.filter.CharacterEncodingFilter.class ...
XmlWebApplicationContext的Resource定位时序图啊啊啊啊
### Spring笔试题知识点详解 #### 一、依赖注入与控制反转 **知识点1:依赖注入的概念** - **定义**: 依赖注入(Dependency Injection, DI)是一种设计模式,它提倡通过构造函数、setter方法或者接口来注入一个类...
### Spring核心容器详解 #### 1. 核心容器 (Core Container) 核心容器模块是Spring框架的基础,提供了核心的IoC功能。BeanFactory是核心容器的基础,它负责实例化、定位、配置以及管理应用程序中的对象。 #### 2....
Spring是一个开源的Java平台,它是Java应用程序开发的一个...XmlWebApplicationContext则专用于Web应用的XML文件中读取上下文。开发者可以根据具体的应用场景选择合适的ApplicationContext实现方式,以满足不同的需求。
1、不同版本的SpringFramework有哪些主要功能? Spring Framework是一个开源的Java平台,它提供了全面的编程和配置模型,适用于企业级应用程序的开发。随着版本的更新,Spring引入了新特性和改进,例如对注解的更好...
有三种常见的ApplicationContext实现:ClassPathXmlApplicationContext、FileSystemXmlApplicationContext和XmlWebApplicationContext,分别用于加载类路径、文件系统和Web环境中的配置文件。 【Bean的生命周期】当...
Spring中ApplicationContext加载机制 ApplicationContext 是 Spring 框架中的核心组件之一,负责加载和管理应用程序中的 Bean 对象。在 Web 应用程序中,ApplicationContext 的加载机制是非常重要的, Spring 提供...
而一般的启动过程,Spring会使用一个默认的实现,XmlWebApplicationContext – 这个上下文实现作为在web容器中的根上下文容器被建立起来,具体的建立过程在下面我们会详细分析。 Java代码 public class ...
### Spring教程知识点详解 #### 一、Spring框架简介 **Spring**是一个开源的轻量级Java应用框架,旨在简化企业级应用的开发。它通过提供一个全面的基础架构支持,使得开发者能够专注于业务逻辑的实现而无需关注...
"Java单元测试Spring Mock的使用" 在Java Web应用中,单元测试是非常重要的一步,它可以帮助开发者检测代码的正确性和可靠性。传统的单元测试方法需要部署到容器中,然而,这种方法存在一些缺陷,例如需要长时间的...
2. 创建WebApplicationContext实例:通常使用`XmlWebApplicationContext`,它可以处理XML格式的配置文件。 3. 配置ApplicationContext:设置父上下文(如果有),并加载bean定义。 4. 初始化ApplicationContext:...
XmlWebApplicationContext 是 Spring 框架中的一种 IoC 容器实现,用于从 XML 文件中读取应用程序的配置信息。 4. XML 配置方式 Spring 框架提供了基于 XML 的配置方式,开发者可以通过在 XML 文件中定义 bean 来...
默认情况下,Spring会选择`XmlWebApplicationContext`作为Web应用的上下文类型,因为它可以从XML配置文件中加载bean定义。 接下来是配置和启动上下文的过程。这包括设置上下文ID,关联Servlet上下文,指定配置文件...
其次,Spring提供了多种ApplicationContext的实现,包括ClassPathXmlApplicationContext、FileSystemXmlApplicationContext和XmlWebApplicationContext。这些实现分别用于从类路径资源、文件系统和Web环境的XML文件...
`FileSystemXmlApplicationContext`和`ClassPathXmlApplicationContext`用于从文件系统或类路径加载XML配置文件,而在Web应用中,通常使用`XmlWebApplicationContext`。 在实际应用中,我们通常会创建一个`...
常见的实现类有FileSystemXmlApplicationContext、XmlWebApplicationContext等,根据不同的应用场景选择合适的实现。 4. **依赖注入(DI)与控制反转(IOC)** - DI是编程实践中的一种解耦技术,由容器管理组件...
Spring提供了几种ApplicationContext的实现,如ClassPathXmlApplicationContext用于读取类路径下的配置文件,FileSystemXmlApplicationContext用于读取文件系统中的配置文件,而XmlWebApplicationContext则适用于Web...
常用的上下文实现有`ClassPathXmlApplicationContext`和`XmlWebApplicationContext`。 ### 单例模式的应用 - **单例模式**:在Spring框架中,单例模式被广泛应用于确保一个类只有一个实例,并提供一个全局访问点。...