`

Spring源码阅读:ContextLoaderListener

阅读更多
spring在web中的启动是由ContextLoaderListener开始的。ContextLoaderListener实现了ServlContextListener接口,并继承了ContextLoader类。

public class ContextLoaderListener extends ContextLoader implements ServletContextListener


笔记如下:

1.ServletContextListener 接口有两个方法:contextInitialized,contextDestroyed。
在服务器加载web应用的时候,这个Listener将被调用。
spring在contextInitialized中进行spring容器的初始化。

this.contextLoader.initWebApplicationContext(event.getServletContext());


2.ContextLoader的initWebApplicationContext方法:

首先判断web应用中是否有spring容器被加载过,如下
if (servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE) != null)


如果有被加载过,将抛出异常。提示是否放置了多个ContextLoaderListener。

3.创建WebApplicationContext前,将先处理父上下文(对于ERA工程而言有用可能)。
普通的web项目,是没有父上下文的。

ApplicationContext parent = loadParentContext(servletContext);

下面这句是创建WebApplicationContext的主过程。

this.context = createWebApplicationContext(servletContext, parent);


创建完的context置于servletContext中,这样Spring容器的宿主就是ServletContext(application Scope)。

servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, this.context);


4.createWebApplicationContext方法:
首先进行ApplicationContext Class的诊断:如果指定了ContextClass但没有实现ConfigurableWebApplicationContext的,将抛出异常。
默认将根据ContextLoader.properties中指定class的实例
即:org.springframework.web.context.support.XmlWebApplicationContext

之后根据Servlet的版本2.4之前及2.5的不同,获取web的DisplayName。
设置ConfigurableWebApplicationContext的id。

最后代码进入实质性的处理
        
        wac.setParent(parent);
        wac.setServletContext(sc);
       //获取configLocation的配置
        wac.setConfigLocation(sc.getInitParameter(CONFIG_LOCATION_PARAM));
        customizeContext(sc, wac);// 用于自定义ContextClass时,扩充自定义Context
        wac.refresh();// 完成context构造过程。

分享到:
评论

相关推荐

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

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

    Spring-5.1.5源码

    Spring框架是Java开发中最常用的轻量级开源框架之一,它为构建企业级应用程序提供了全面的基础设施。...通过阅读和研究源码,开发者可以更深入地了解Spring的工作原理,从而更好地优化和定制自己的应用。

    Struts2.5.22+Spring5.3.10+Hiberbate5.6.15整合练习源码包

    6. 配置Web.xml:添加Struts2的过滤器,以及Spring的ContextLoaderListener,启动时加载Spring容器。 7. 编写JSP页面:作为视图展示结果,使用Struts2标签库进行交互。 这个源码包提供的sshweb项目,就是这样一个...

    spring_MVC源码

    09. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 10. </listener> 11. 12. <servlet> 13. <servlet-name>spring</servlet-name> 14. <servlet-class>org.spring...

    DispatcherServlet 和 ContextLoaderListener 区别

    在Java Web开发中,DispatcherServlet和ContextLoaderListener都是Spring框架中的关键组件,它们各自承担着不同的职责,共同构建了一个高效、灵活的Web应用程序。这里我们将深入探讨这两个组件的区别及其工作原理。 ...

    s2sh struts2 Spring hibernate整合实例(附带所有jar包,及源码)

    还需要在web.xml中配置ContextLoaderListener,以便在Tomcat启动时加载Spring上下文。 4. **配置Hibernate**:设置Hibernate的配置文件(hibernate.cfg.xml),包括数据库连接信息、实体类映射等。然后,创建...

    Struts2 Spring Hibernate的配置及登录实例(附源码)

    - 配置web.xml,添加Struts2的Filter,以及Spring的ContextLoaderListener。 - 在Struts2配置中引入Spring插件,使Struts2能够识别Spring管理的Action。 6. **源码分析** - 源码中可能包含`struts.xml`、`...

    Spring之Spring2.5集成Struts2.2

    3. **配置Spring**:同样在web.xml中,需要配置Spring的DispatcherServlet和ContextLoaderListener。前者处理请求,后者初始化Spring应用上下文。 4. **Struts2-Spring插件**:为了使Struts2能与Spring协同工作,...

    Spring mvc + Spring + Spring jdbc 整合 demo.rar

    - `web.xml`:配置Spring MVC的DispatcherServlet和ContextLoaderListener。 - `applicationContext.xml`:定义Spring容器的Bean,包括数据源、事务管理器、Service和DAO。 - `pom.xml`:Maven项目配置文件,包含...

    baobaotao源码springmvc+spring+springjdbc技术栈maven配置

    同时,需要配置ContextLoaderListener,以便初始化Spring的ApplicationContext。Spring的配置文件则会定义Bean,包括Controller、Service、DAO等,以及相关的数据源和事务管理器。 Spring JDBC的配置主要包括数据源...

    spring源代码解析

    下面我们使用ContextLoaderListener作为载入器作一个详细的分析,这个Servlet的监听器是根上下文被载入的地方,也是整个 Spring web应用加载上下文的第一个地方;从加载过程我们可以看到,首先从Servlet事件中得到...

    在web项目中引入spring

    - **源码分析**: 了解Spring的工作原理,可以通过阅读源码加深理解,学习设计模式和最佳实践。 - **开发工具**: 使用IDE如IntelliJ IDEA或Eclipse,它们通常有集成的Spring支持,如自动配置、代码提示和调试功能。 ...

    SpringMvc+Spring+MyBatis+Maven整合视频源码+数据库

    这里可能包含了Spring MVC的DispatcherServlet配置,以及其他如ContextLoaderListener来初始化Spring应用上下文。 `META-INF`目录常常用于存放元数据,例如`MANIFEST.MF`文件,它在JAR和WAR文件中记录了关于该文件...

    Spring mvc 环境搭建(maven构建)

    1. 在 `src/main/webapp/WEB-INF` 目录下创建 `web.xml` 文件,配置 DispatcherServlet 和 ContextLoaderListener: ```xml <listener-class>org.springframework.web.context.ContextLoaderListener ...

    struts2.0+hibernate3.0+spring2.0整合(2)

    2. **配置Spring**:同样在web.xml中配置Spring的ContextLoaderListener,初始化Spring容器,并指定配置文件的位置。Spring的bean定义通常包括Service、DAO以及对应的实现类。 3. **配置Hibernate**:配置Hibernate...

    Jersey1.8在spring环境下的实现 包括实例代码

    3. **Spring与Jersey集成:** 将Jersey集成到Spring环境中,可以通过Spring的ContextLoaderListener初始化Jersey的Servlet,或者使用`@Provider`注解的bean进行注册。这允许我们在Spring容器中管理Jersey组件,并...

    Maven构建Spring3mvc和Hibernate

    2. 配置:在`web.xml`中配置DispatcherServlet和ContextLoaderListener,初始化Spring MVC和Spring容器。 3. 控制器:使用@Controller注解定义控制器类,@RequestMapping处理HTTP请求。 4. 视图解析:通过...

    apache wink集成spring 开发rest服务

    8. **部署**:完成开发后,可以通过Spring的ContextLoaderListener加载应用上下文,并将Wink的Servlet配置到应用服务器中,如Tomcat或Jetty。这样,REST服务就可以通过HTTP请求被外部调用了。 通过上述知识点,我们...

    整合struts2和spring源代码(可以直接在tomcat中运行)

    org.springframework.web.context.ContextLoaderListener 4.配置spring的配置文件(可以查看WEB-INF里面的applicationContext.xml文件) 注意:如果是默认,一定要放在WEB-INF中并文件名为...

    spring set

    `web.xml`是Java Web应用程序的部署描述符,通常用于配置Spring的DispatcherServlet、ContextLoaderListener等。在Spring MVC项目中,`web.xml`通常会包含以下内容: ```xml <servlet-name>dispatcher ...

Global site tag (gtag.js) - Google Analytics