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传入就可以了。
相关推荐
总的来说,Spring 3.x中的WebApplicationContext初始化是一个涉及Web容器、监听器和Servlet协同工作的过程,旨在为Web应用提供一个可扩展且强大的依赖注入和管理环境。通过正确配置ContextLoaderListener或...
1. **加载配置**:`DispatcherServlet`会在初始化阶段读取配置文件(如`servlet-context.xml`),通过`WebApplicationContext`加载Bean定义。这个过程中,你可以自定义拦截器、视图解析器、异常处理器等关键组件。 ...
SpringMVC DispatcherServlet 初始化过程详解 DispatcherServlet 是 SpringMVC 框架中的核心组件,对于 SpringMVC 的请求处理和响应起着至关重要的作用。DispatcherServlet 的初始化过程是 SpringMVC 实现原理的...
- **ContextLoaderListener**:这是一个重要的监听器,它会在Web应用程序启动时初始化Spring的WebApplicationContext。通常情况下,开发者会在`web.xml`中配置此监听器以及应用程序上下文的位置。 - **配置示例**...
在initServletBean方法中,它会根据web.xml中的contextConfigLocation参数来构建SpringMVC的上下文环境,如果web.xml中配置了该参数,那么将会在应用启动的时候初始化一个WebApplicationContext实例,并将其保存在...
在独立应用程序中,通过手工初始化 Spring 容器,可以使用以下方式获取 ApplicationContext 对象: `ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml");` `ac.getBean("bean...
Spring框架初始化解析 Spring框架初始化解析是指在使用Spring框架时,如何正确地初始化和加载Spring框架的配置和Bean容器。Spring框架的初始化过程是由Spring容器加载和管理的,通过使用不同的加载方式和Bean生命...
- 此方法负责初始化或获取 `WebApplicationContext` 对象。 - 首先尝试从 ServletContext 中获取已存在的 `WebApplicationContext`。 - 如果不存在,则创建一个新的 `WebApplicationContext` 实例,并进行相应的...
在深入了解Spring MVC的启动初始化过程之前,让我们首先理解Web容器(如Tomcat)的初始化流程,因为Spring MVC是在Web容器中运行的。 Web容器初始化过程: 1. Web容器会读取`web.xml`部署描述符,根据其中的`...
DispatcherServlet的初始化流程涉及多个步骤,通过org.springframework.web.servlet.FrameworkServlet#initWebApplicationContext 方法初始化WebApplicationContext,然后调用onRefresh方法进行refresh操作。...
这个过程可以通过时序图来形象地表示,从`ContextLoaderListener`开始,调用`ContextLoader`,然后初始化`WebApplicationContext`,完成整个Spring容器的初始化。 总结来说,Spring在容器启动时,通过`...
两者的主要区别在于初始化时机和依赖管理的方式,Spring的WebApplicationContext通过`web.xml`监听器或过滤器进行全局初始化,而Struts2插件则在Struts2的生命周期内处理依赖注入。选择哪种方式取决于项目的具体需求...
1. **初始化WebApplicationContext**:当`contextInitialized()`方法被调用时,`ContextLoaderListener`会创建一个新的`ContextLoader`实例,并通过`initWebApplicationContext()`方法初始化WebApplicationContext。...
在Servlet容器启动后,DispatcherServlet 初始化时,会创建自己的WebApplicationContext,并将其设置为Servlet上下文的属性。DispatcherServlet的初始化过程包括: 2.1 Servlet的init()方法被调用,创建子上下文。...
接着,该方法会记录日志并显示相关信息,然后在日志级别为INFO时,输出一条消息表示正在初始化根WebApplicationContext。 初始化过程包括以下步骤: 1. 加载配置文件:通过`paramConfigLocation`参数指定的路径...
9. **initOtherSpecialBeans()**: 这是一个预留的扩展点,允许特定上下文子类进行额外的初始化,例如WebApplicationContext可能在这里初始化其他特定于Web环境的Bean。 `refresh()`方法的整个过程是Spring启动和...
总结,Spring MVC的执行流程包括初始化阶段(创建`WebApplicationContext`,配置`ServletConfig`和`ServletContext`)和请求处理阶段(通过`DispatcherServlet`接收请求,分发到相应的Controller处理,然后返回响应...
Spring MVC的初始化则是在Spring容器初始化之后进行的。在`web.xml`中,我们配置了一个`DispatcherServlet`,这个Servlet是Spring MVC的核心,它有自己的ApplicationContext,也就是子容器。`DispatcherServlet`的`...
它会根据依赖关系自动装配bean,处理单例bean的初始化,以及处理任何配置的bean后处理器和初始化回调方法。 在Web MVC场景下,除了根`WebApplicationContext`外,还会创建一个或多个子`WebApplicationContext`,...
日志显示,Spring根WebApplicationContext正在初始化,加载了多个XML配置文件,如`applicationContext-actions.xml`、`applicationContext-beans.xml`和`applicationContext-common.xml`。这表明Spring框架正在加载...