`

WebApplicationContext初始化

 
阅读更多

 

 ApplicationContext是Spring的核心,Context我们通常解释为上下文环境,我想用“容器”来表述它更容易理解一些,ApplicationContext则是“应用的容器”了;在Web应用中,我们会用到WebApplicationContext,WebApplicationContext继承自ApplicationContext;WebApplicationContext的初始化方式和BeanFactory.ApplicationContext有所区别,因为WebApplicationContext需要ServletContext实例,也就是说它必须拥有Web容器的前提下才能完成启动的工作.有过Web开发经验的读者都知道可以在web.xml中配置自启动的Servlet或定义Web容器监听器(ServletContextListener),借助着两者中的任何一个,我们就可以启动Spring Web应用上下文的工作.

spring有三种启动方式,使用ContextLoaderServlet,ContextLoaderListener和ContextLoaderPlugIn
spring3.0及以后版本中已经删除ContextLoaderServlet 和Log4jConfigServlet
可以采用余下两种启动方式ContextLoaderListener和ContextLoaderPlugIn搜索
建议使用ContextLoaderListener

这两个方法都是在web应用启动的时候来初始化WebApplicationContext,我个人认为Listerner要比Servlet更好一些,因为Listerner监听应用的启动和结束,而Servlet得启动要稍微延迟一些,如果在这时要做一些业务的操作,启动的前后顺序是有影响的。

配置例子如下:
context-param> 
<param-name>contextConfigLocation</param-name> 
<param-value>/WEB-INF/applicationContext.xml</param-value> 
</context-param> 

<listener> 
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

那么在ContextLoaderListener和ContextLoaderServlet中到底做了什么呢? 
以ContextLoaderListener为例,我们可以看到 
public void contextInitialized(ServletContextEvent event) { 
this.contextLoader = createContextLoader(); 
this.contextLoader.initWebApplicationContext(event.getServletContext()); 

protected ContextLoader createContextLoader() { 
return new ContextLoader(); 

ContextLoader是一个工具类,用来初始化WebApplicationContext,其主要方法就是initWebApplicationContext,我们继续追踪initWebApplicationContext这个方法(具体代码我不贴出,大家可以看Spring中的源码),我们发现,原来ContextLoader是把WebApplicationContext(XmlWebApplicationContext是默认实现类)放在了ServletContext中,ServletContext也是一个“容器”,也是一个类似Map的结构,而WebApplicationContext在ServletContext中的KEY就是WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,我们如果要使用WebApplicationContext则需要从ServletContext取出,Spring提供了一个WebApplicationContextUtils类,可以方便的取出WebApplicationContext,只要把ServletContext传入就可以了。 

分享到:
评论

相关推荐

    spring3.x的读书笔记3

    总的来说,Spring 3.x中的WebApplicationContext初始化是一个涉及Web容器、监听器和Servlet协同工作的过程,旨在为Web应用提供一个可扩展且强大的依赖注入和管理环境。通过正确配置ContextLoaderListener或...

    Spring MVC启动时初始化的几个常用方法

    1. **加载配置**:`DispatcherServlet`会在初始化阶段读取配置文件(如`servlet-context.xml`),通过`WebApplicationContext`加载Bean定义。这个过程中,你可以自定义拦截器、视图解析器、异常处理器等关键组件。 ...

    Spring框架系列(13) - SpringMVC实现原理之DispatcherServlet的初始化过程.doc

    SpringMVC DispatcherServlet 初始化过程详解 DispatcherServlet 是 SpringMVC 框架中的核心组件,对于 SpringMVC 的请求处理和响应起着至关重要的作用。DispatcherServlet 的初始化过程是 SpringMVC 实现原理的...

    spring框架中常用的配置

    - **ContextLoaderListener**:这是一个重要的监听器,它会在Web应用程序启动时初始化Spring的WebApplicationContext。通常情况下,开发者会在`web.xml`中配置此监听器以及应用程序上下文的位置。 - **配置示例**...

    Spring源码学习九:DispatcherServlet初始化源码分析1

    在initServletBean方法中,它会根据web.xml中的contextConfigLocation参数来构建SpringMVC的上下文环境,如果web.xml中配置了该参数,那么将会在应用启动的时候初始化一个WebApplicationContext实例,并将其保存在...

    Spring获取webapplicationcontext,applicationcontext几种方法详解

    在独立应用程序中,通过手工初始化 Spring 容器,可以使用以下方式获取 ApplicationContext 对象: `ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml");` `ac.getBean("bean...

    Spring框架初始化解析

    Spring框架初始化解析 Spring框架初始化解析是指在使用Spring框架时,如何正确地初始化和加载Spring框架的配置和Bean容器。Spring框架的初始化过程是由Spring容器加载和管理的,通过使用不同的加载方式和Bean生命...

    深度解析springMvc

    - 此方法负责初始化或获取 `WebApplicationContext` 对象。 - 首先尝试从 ServletContext 中获取已存在的 `WebApplicationContext`。 - 如果不存在,则创建一个新的 `WebApplicationContext` 实例,并进行相应的...

    Spring MVC深入学习之启动初始化过程

    在深入了解Spring MVC的启动初始化过程之前,让我们首先理解Web容器(如Tomcat)的初始化流程,因为Spring MVC是在Web容器中运行的。 Web容器初始化过程: 1. Web容器会读取`web.xml`部署描述符,根据其中的`...

    从源码的角度来看SpringMVC.pdf

    DispatcherServlet的初始化流程涉及多个步骤,通过org.springframework.web.servlet.FrameworkServlet#initWebApplicationContext 方法初始化WebApplicationContext,然后调用onRefresh方法进行refresh操作。...

    Spring在容器在启动的时候发生了什么

    这个过程可以通过时序图来形象地表示,从`ContextLoaderListener`开始,调用`ContextLoader`,然后初始化`WebApplicationContext`,完成整个Spring容器的初始化。 总结来说,Spring在容器启动时,通过`...

    spring在web.xml中和在struts中的不同配置.[收集].pdf

    两者的主要区别在于初始化时机和依赖管理的方式,Spring的WebApplicationContext通过`web.xml`监听器或过滤器进行全局初始化,而Struts2插件则在Struts2的生命周期内处理依赖注入。选择哪种方式取决于项目的具体需求...

    精品专题(2021-2022年收藏)spring项目中监听器作用.doc

    1. **初始化WebApplicationContext**:当`contextInitialized()`方法被调用时,`ContextLoaderListener`会创建一个新的`ContextLoader`实例,并通过`initWebApplicationContext()`方法初始化WebApplicationContext。...

    SpringMVC 处置流程分析

    在Servlet容器启动后,DispatcherServlet 初始化时,会创建自己的WebApplicationContext,并将其设置为Servlet上下文的属性。DispatcherServlet的初始化过程包括: 2.1 Servlet的init()方法被调用,创建子上下文。...

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

    接着,该方法会记录日志并显示相关信息,然后在日志级别为INFO时,输出一条消息表示正在初始化根WebApplicationContext。 初始化过程包括以下步骤: 1. 加载配置文件:通过`paramConfigLocation`参数指定的路径...

    13、源码解读(3题)1

    9. **initOtherSpecialBeans()**: 这是一个预留的扩展点,允许特定上下文子类进行额外的初始化,例如WebApplicationContext可能在这里初始化其他特定于Web环境的Bean。 `refresh()`方法的整个过程是Spring启动和...

    spring的mvc.doc

    总结,Spring MVC的执行流程包括初始化阶段(创建`WebApplicationContext`,配置`ServletConfig`和`ServletContext`)和请求处理阶段(通过`DispatcherServlet`接收请求,分发到相应的Controller处理,然后返回响应...

    浅谈Spring与SpringMVC父子容器的关系与初始化

    Spring MVC的初始化则是在Spring容器初始化之后进行的。在`web.xml`中,我们配置了一个`DispatcherServlet`,这个Servlet是Spring MVC的核心,它有自己的ApplicationContext,也就是子容器。`DispatcherServlet`的`...

    Spring源代码解析(二):IoC容器在Web容器中的启动.doc

    它会根据依赖关系自动装配bean,处理单例bean的初始化,以及处理任何配置的bean后处理器和初始化回调方法。 在Web MVC场景下,除了根`WebApplicationContext`外,还会创建一个或多个子`WebApplicationContext`,...

    详细错误提示

    日志显示,Spring根WebApplicationContext正在初始化,加载了多个XML配置文件,如`applicationContext-actions.xml`、`applicationContext-beans.xml`和`applicationContext-common.xml`。这表明Spring框架正在加载...

Global site tag (gtag.js) - Google Analytics