`

webapplication 初始化

 
阅读更多
在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();

待续。。。。。
分享到:
评论

相关推荐

    信息: Deploying web application directory lx01

    这是一个Spring框架的关键组件,它负责初始化Spring Web应用的上下文。当Tomcat尝试加载这个类时,引发了`ClassNotFoundException`,表明系统找不到指定的类。 `ClassNotFoundException`通常意味着以下几点: 1. **...

    初始化的单体流程引擎 camunda

    本篇文章将详细探讨如何在Spring Boot框架中集成并初始化Camunda流程引擎。 **Spring Boot集成Camunda** Spring Boot以其“开箱即用”的特性,简化了Java应用的开发过程。集成Camunda到Spring Boot项目中,可以...

    ASP.NET Web Application

    这包括初始化、加载数据、验证、呈现和卸载等阶段,开发者可以针对这些阶段编写代码以控制页面行为。 4. **控件与事件处理**:ASP.NET Web Forms提供了丰富的服务器控件,如按钮、文本框、数据网格等,它们具有内置...

    Grails 1.1 Web Application Development

    - **项目初始化**:使用Grails命令行工具创建新的项目结构。 - **环境配置**:设置不同的环境(如开发、测试和生产环境),以便更好地管理部署和配置。 - **依赖管理**:利用Gradle或Maven进行依赖管理,确保项目的...

    Elecve Web Application (Java servlet)

    1. **Servlet生命周期**:理解Servlet的初始化、服务和销毁三个阶段,以及如何配置Servlet。 2. **JSP语法和指令**:包括脚本元素、动作标签、EL(表达式语言)和JSTL(JavaServer Pages Standard Tag Library)的...

    springboot初始化资源的几种方式源码

    对于基于Servlet的Web应用,可以实现`WebApplicationInitializer`接口来自定义应用初始化。不过,Spring Boot默认使用`SpringBootServletInitializer`,它简化了这个过程,通常无需直接使用`...

    Modeling Web Application Architecture With UML

    随着Web应用的日益复杂化,使用UML来进行有效的建模变得越来越重要。通过本文介绍的UML扩展方法,可以更好地适应Web应用特有的需求,使得设计者、实施者和架构师能够更准确地捕捉和表达系统的各个方面。这对于确保...

    Angular JS Web Application Development Blueprints

    此外,还介绍了Yeoman工作流工具,它能加速项目的初始化和测试设置。Karma用于单元测试,而Protractor用于端到端测试,确保整个应用的功能完整性和稳定性。 第三部分关注的是利用AngularJS快速原型设计。书中通过一...

    Learning Single-page Web Application Development

    - **项目初始化**:介绍如何搭建开发环境,设置项目的基本结构。 - **前端开发**:讲解AngularJS的基本概念和常用指令,如何组织前端代码,实现模块化和组件化。 - **后端开发**:介绍如何使用Node.js和Express框架...

    Struts2中实现web应用的初始化实例详解

    Struts2中实现web应用的初始化实例详解 在JavsSE中,main方法为应用提供了入口,而在Android中,我们可以使用Application对于整个应用的生命周期进行管理,那么在基于Struts2的JavaEE应用中,如何实现类似的功能呢。...

    Single Page Web Application JavaScript end to end

    SPA的应用生命周期管理涉及到了应用初始化、状态保持、交云处理等关键环节。为了管理客户端的路由,即用户访问的页面路径,常用的技术和库有: 1. HTML5的History API,允许开发者控制浏览器的地址栏而不刷新页面。 ...

    SpringBoot项目启动时如何读取配置以及初始化资源

    另外,对于Web应用,`ApplicationRunner`接口与`CommandLineRunner`类似,但会在Web环境的初始化之后调用。 总结来说,SpringBoot通过多种方式提供配置文件的读取和资源的初始化,开发者可以根据具体需求选择合适的...

    Application对象的聊天室(ASP.NET)

    1. **设置初始化**:在Global.asax文件中的`Application_Start`事件中,你可以预置`Application`对象,例如初始化空的消息列表。 2. **消息存储**:每当有新消息提交时,通过`Application.Lock()`锁定`Application`...

    tapestry5 build web application-alexander

    2. **页面生命周期**:Tapestry 5管理页面的创建、初始化、渲染等过程。书中会解释每个阶段的工作原理,以及如何在这些阶段中插入自定义逻辑。 3. **事件处理**:Tapestry 5支持基于事件的编程,使得页面间的通信...

    如何在ASP.NET应用程序中初始化

    在实际的ASP.NET应用程序中,`Global.asax`文件的`Application_Start`事件是放置初始化代码的理想位置,因为它确保了这些代码只在应用程序启动时执行一次。这样做可以避免每次请求时都重复初始化操作,从而提高性能...

    spring boot源码-自定义初始化器的三种方式

    在Spring Boot应用中,自定义初始化器是一种扩展和定制应用程序启动过程的方式。下面将详细介绍三种在Spring Boot中创建自定义初始化器的方法。 ### 第一种:通过`spring.factories`文件 1. **创建配置文件**:在`...

    java web的运行开发环境和servlet的开发部署

    其中,JDK 是 Java 开发的基础环境,而 Tomcat 是一个 Servlet 和 JSP 容器,负责管理 Servlet 和 JSP 的初始化、运行和销毁等。 Servlet 是 Java 服务器端小程序,用来进行 web 开发,接收 HTTP 请求,产生静态的 ...

    Eclipse Web Application Plugin-开源

    2. **项目模板**:该插件提供了多种预定义的Web项目模板,如Java Servlet、JSP、JSF等,帮助开发者快速启动新项目,节省了初始化项目的宝贵时间。 3. **代码智能提示**:在编写Java、JSP、JSF等代码时,插件会提供...

Global site tag (gtag.js) - Google Analytics