在web.xml中配置了ContextLoaderListener。
定义如下:
public class ContextLoaderListener extends ContextLoader
implements ServletContextListener {
因为实现了ServletContextListener 接口,所以在web容器启动的时候,就会执行该接口的方法contextInitialized()。
方法中this.contextLoader.initWebApplicationContext(event.getServletContext());
开始初始化。
ApplicationContext parent = loadParentContext(servletContext);
先取得parent 。在我经历的项目中,parent 没有配置。先不看。
然后是this.context = createWebApplicationContext(servletContext, parent);
然后是
Class<?> contextClass = determineContextClass(sc);
然后是 contextClassName =
defaultStrategies.getProperty(WebApplicationContext.class.getName());
try {
return ClassUtils.forName(contextClassName, ContextLoader.class.getClassLoader());
}
其中defaultStrategies会在static初始段初始化,它会默认去读spring的jar中的ContextLoader.properties文件。文件内容如下:
# Default WebApplicationContext implementation class for ContextLoader.
# Used as fallback when no explicit context implementation has been specified as context-param.
# Not meant to be customized by application developers.
org.springframework.web.context.WebApplicationContext=org.springframework.web.context.support.XmlWebApplicationContext
所以框架默认的是XmlWebApplicationContext。
所以返回的contextClass是XmlWebApplicationContext实例。
接下来执行 ConfigurableWebApplicationContext wac =
(ConfigurableWebApplicationContext) BeanUtils.instantiateClass(contextClass);
这个的目的就是利用XmlWebApplicationContext的构造方法,返回一个XmlWebApplicationContext实例。
其中的方法return
instantiateClass(clazz.getDeclaredConstructor());
描述如下:
Convenience method to instantiate a class using the given constructor. As this method doesn't try to load classes by name, it should avoid class-loading issues.
Note that this method tries to set the constructor accessible if given a non-accessible (that is, non-public) constructor.
具体我还不是很了解,待续。
接下来是 wac.setParent(parent);
wac.setServletContext(sc);//保存sc的引用
wac.setConfigLocation(sc.getInitParameter(CONFIG_LOCATION_PARAM));
其中的CONFIG_LOCATION_PARAM的值为
public static final String CONFIG_LOCATION_PARAM = "
contextConfigLocation";
这也是为什么我们的bean的定义文件必须配置在param为这个的下边的原因。
接下来是customizeContext(sc, wac);这个没看到具体实现,估计是扩展用的。
接下来就是最重要的最后一步wac.refresh();
待续。。。。。
分享到:
相关推荐
这是一个Spring框架的关键组件,它负责初始化Spring Web应用的上下文。当Tomcat尝试加载这个类时,引发了`ClassNotFoundException`,表明系统找不到指定的类。 `ClassNotFoundException`通常意味着以下几点: 1. **...
本篇文章将详细探讨如何在Spring Boot框架中集成并初始化Camunda流程引擎。 **Spring Boot集成Camunda** Spring Boot以其“开箱即用”的特性,简化了Java应用的开发过程。集成Camunda到Spring Boot项目中,可以...
这包括初始化、加载数据、验证、呈现和卸载等阶段,开发者可以针对这些阶段编写代码以控制页面行为。 4. **控件与事件处理**:ASP.NET Web Forms提供了丰富的服务器控件,如按钮、文本框、数据网格等,它们具有内置...
- **项目初始化**:使用Grails命令行工具创建新的项目结构。 - **环境配置**:设置不同的环境(如开发、测试和生产环境),以便更好地管理部署和配置。 - **依赖管理**:利用Gradle或Maven进行依赖管理,确保项目的...
1. **Servlet生命周期**:理解Servlet的初始化、服务和销毁三个阶段,以及如何配置Servlet。 2. **JSP语法和指令**:包括脚本元素、动作标签、EL(表达式语言)和JSTL(JavaServer Pages Standard Tag Library)的...
对于基于Servlet的Web应用,可以实现`WebApplicationInitializer`接口来自定义应用初始化。不过,Spring Boot默认使用`SpringBootServletInitializer`,它简化了这个过程,通常无需直接使用`...
随着Web应用的日益复杂化,使用UML来进行有效的建模变得越来越重要。通过本文介绍的UML扩展方法,可以更好地适应Web应用特有的需求,使得设计者、实施者和架构师能够更准确地捕捉和表达系统的各个方面。这对于确保...
此外,还介绍了Yeoman工作流工具,它能加速项目的初始化和测试设置。Karma用于单元测试,而Protractor用于端到端测试,确保整个应用的功能完整性和稳定性。 第三部分关注的是利用AngularJS快速原型设计。书中通过一...
- **项目初始化**:介绍如何搭建开发环境,设置项目的基本结构。 - **前端开发**:讲解AngularJS的基本概念和常用指令,如何组织前端代码,实现模块化和组件化。 - **后端开发**:介绍如何使用Node.js和Express框架...
Struts2中实现web应用的初始化实例详解 在JavsSE中,main方法为应用提供了入口,而在Android中,我们可以使用Application对于整个应用的生命周期进行管理,那么在基于Struts2的JavaEE应用中,如何实现类似的功能呢。...
SPA的应用生命周期管理涉及到了应用初始化、状态保持、交云处理等关键环节。为了管理客户端的路由,即用户访问的页面路径,常用的技术和库有: 1. HTML5的History API,允许开发者控制浏览器的地址栏而不刷新页面。 ...
另外,对于Web应用,`ApplicationRunner`接口与`CommandLineRunner`类似,但会在Web环境的初始化之后调用。 总结来说,SpringBoot通过多种方式提供配置文件的读取和资源的初始化,开发者可以根据具体需求选择合适的...
1. **设置初始化**:在Global.asax文件中的`Application_Start`事件中,你可以预置`Application`对象,例如初始化空的消息列表。 2. **消息存储**:每当有新消息提交时,通过`Application.Lock()`锁定`Application`...
2. **页面生命周期**:Tapestry 5管理页面的创建、初始化、渲染等过程。书中会解释每个阶段的工作原理,以及如何在这些阶段中插入自定义逻辑。 3. **事件处理**:Tapestry 5支持基于事件的编程,使得页面间的通信...
在实际的ASP.NET应用程序中,`Global.asax`文件的`Application_Start`事件是放置初始化代码的理想位置,因为它确保了这些代码只在应用程序启动时执行一次。这样做可以避免每次请求时都重复初始化操作,从而提高性能...
在Spring Boot应用中,自定义初始化器是一种扩展和定制应用程序启动过程的方式。下面将详细介绍三种在Spring Boot中创建自定义初始化器的方法。 ### 第一种:通过`spring.factories`文件 1. **创建配置文件**:在`...
其中,JDK 是 Java 开发的基础环境,而 Tomcat 是一个 Servlet 和 JSP 容器,负责管理 Servlet 和 JSP 的初始化、运行和销毁等。 Servlet 是 Java 服务器端小程序,用来进行 web 开发,接收 HTTP 请求,产生静态的 ...
2. **项目模板**:该插件提供了多种预定义的Web项目模板,如Java Servlet、JSP、JSF等,帮助开发者快速启动新项目,节省了初始化项目的宝贵时间。 3. **代码智能提示**:在编写Java、JSP、JSF等代码时,插件会提供...