`

Spring源码阅读:XmlWebApplicationContext

阅读更多
XmlWebApplicationContext是spring在web应用中的applicationContext,
在ContextLoaderListener或ContextLoaderServlet中完成了初步的设置。

XmlWebApplicationContext跟其他的applicationContext(FileSystem,Classpath)一样,是AbstractApplicationContext的一个子类。
applicationContext的refresh过程是线程同步的。
如下:
synchronized (this.startupShutdownMonitor)

阅读笔记:

方法1
prepareRefresh();  //设定起始时间,并设置active标记

方法2
prepareBeanFactory(beanFactory);

// 完成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)。
具体的加载过程是委托给XmlBeanDefinitionReader完成。

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);
}


该方法中的XmlBeanDefinitionReader完成了WEB-INF/applicationContext.xml(可指定contextConfigLoaction的值,可使用,; \t\n指定多个applicationContext.xml文件)的加载

// 获取beanDefinitionConfig,循环加载
protected void loadBeanDefinitions(XmlBeanDefinitionReader reader) throws IOException {
String[] configLocations = getConfigLocations();
if (configLocations != null) {
for (String configLocation : configLocations) {
                // 完成所有applicationContext.xml的加载
                reader.loadBeanDefinitions(configLocation);
}
}
}


方法3
下面的一大片,慢慢看吧。

        beanFactory.setBeanClassLoader(getClassLoader());
        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();
分享到:
评论

相关推荐

    Spring源码学习七:web应用自动装配Spring配置文件1

    本文主要围绕"Spring源码学习七:web应用自动装配Spring配置文件1"这一主题,详细解析Web环境中Spring的初始化过程。 首先,我们注意到在传统的Java应用程序中,通常使用`ClassPathXmlApplicationContext`手动创建...

    spring-learning:我的学习Spring和Spring Boot的笔记

    Spring学习 此存储库包含有关对Spring Framework(v5.2.x)和Spring Boot(v2.4.x)的源代码进行分析的学习笔记。... ApplicationContext applicationContext = new XmlWebApplicationContext ( new ClasspathR

    Spring源码分析

    ### Spring源码分析 #### 一、Spring框架概述与核心组件 Spring框架是一个开源的Java平台,它提供了全面的基础架构支持,使得开发人员能够轻松地构建企业级应用。Spring的核心特性之一是其强大的依赖注入...

    spring源代码解析

    而一般的启动过程,Spring会使用一个默认的实现,XmlWebApplicationContext – 这个上下文实现作为在web容器中的根上下文容器被建立起来,具体的建立过程在下面我们会详细分析。 Java代码 public class ...

    spring笔试题28题选择+2简答

    **知识点1:Spring AOP的基本原理** - **AOP简介**: 面向切面编程(Aspect-Oriented Programming, AOP)是一种编程范式,用于将横切关注点(如日志记录、安全检查等)从业务逻辑中分离出来,以减少代码冗余并提高可...

    spring-web-2.5.jar

    org.springframework.web.context.support.XmlWebApplicationContext.class org.springframework.web.filter.AbstractRequestLoggingFilter.class org.springframework.web.filter.CharacterEncodingFilter.class ...

    XmlWebApplicationContext的Resource定位时序图

    XmlWebApplicationContext的Resource定位时序图啊啊啊啊

    Spring系列面试题129道(附答案解析)

    - 依赖注入(DI)支持:Spring通过控制反转(IoC)支持将对象之间的依赖关系通过配置文件或注解来管理。 - 面向切面编程(AOP):Spring支持面向切面编程,可以将通用任务(如日志记录和事务管理)模块化。 - 事务...

    spring 所有功能详解

    - **实例**:Spring对DAO层的支持通常包括连接池管理、SQL查询执行、结果集处理等。 - **DataSource**:Spring支持多种数据源实现,如基于JDBC的数据源。 - **JdbcTemplate**:这是一个高级的JDBC抽象层,简化了...

    超详细Spring面试题和答案

    - **面向切面编程 (AOP)**:Spring支持面向切面编程,允许开发者将横切关注点(如日志、安全等)从业务逻辑中分离出来。 - **容器化**:Spring容器管理应用程序中的对象及其生命周期和配置。 - **MVC框架**:Spring...

    Spring中ApplicationContext加载机制

    XmlWebApplicationContext:专为 Web 工程定制的,例如: ```java ApplicationContext ctx = new XmlWebApplicationContext("WEB-INF/applicationContext.xml"); ``` 这些实现都可以根据实际情况进行选择,并且...

    Spring教程

    ### Spring教程知识点详解 #### 一、Spring框架简介 **Spring**是一个开源的轻量级Java应用框架,旨在简化企业级应用的开发。它通过提供一个全面的基础架构支持,使得开发者能够专注于业务逻辑的实现而无需关注...

    Spring————面试题库

    Spring是一个开源的Java平台,它是Java应用程序开发的一个...XmlWebApplicationContext则专用于Web应用的XML文件中读取上下文。开发者可以根据具体的应用场景选择合适的ApplicationContext实现方式,以满足不同的需求。

    spring教程(ppt版)

    有三种常见的ApplicationContext实现:ClassPathXmlApplicationContext、FileSystemXmlApplicationContext和XmlWebApplicationContext,分别用于加载类路径、文件系统和Web环境中的配置文件。 【Bean的生命周期】当...

    Spring在web下启动流程学习笔记

    默认情况下,Spring会选择`XmlWebApplicationContext`作为Web应用的上下文类型,因为它可以从XML配置文件中加载bean定义。 接下来是配置和启动上下文的过程。这包括设置上下文ID,关联Servlet上下文,指定配置文件...

    SpringMVC源码剖析(二)- DispatcherServlet的前世今生1

    为此,Spring MVC引入了WebApplicationContext接口,特别是XmlWebApplicationContext,它是专门为Web应用程序设计的IoC上下文。它能够加载Web相关的配置,并在Servlet容器启动时初始化Spring MVC的组件,如...

    Spring整理1

    3. **数据库连接池**:Spring通常使用DataSource来管理数据库连接。例如,使用Apache的Commons DBCP或C3P0,我们可以这样配置: ```xml ${jdbc.driverClassName}" /> ${jdbc.url}" /> ${jdbc.username}" /> ${...

    Spring面试题2016版资料.docx

    XmlWebApplicationContext 是 Spring 框架中的一种 IoC 容器实现,用于从 XML 文件中读取应用程序的配置信息。 4. XML 配置方式 Spring 框架提供了基于 XML 的配置方式,开发者可以通过在 XML 文件中定义 bean 来...

    java单元测试 spring mock的使用

    "Java单元测试Spring Mock的使用" 在Java Web应用中,单元测试是非常重要的一步,它可以帮助开发者检测代码的正确性和可靠性。传统的单元测试方法需要部署到容器中,然而,这种方法存在一些缺陷,例如需要长时间的...

    spring学习笔记

    - **Bean的管理**:Spring通过Bean工厂(BeanFactory)或应用上下文(ApplicationContext)来管理应用中的对象。常用的上下文实现有`ClassPathXmlApplicationContext`和`XmlWebApplicationContext`。 ### 单例模式...

Global site tag (gtag.js) - Google Analytics