`
chenchh
  • 浏览: 60692 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring启动<三>——XmlWebApplicationContext

阅读更多

    在上一篇中,我们已经看过了XmlWebApplicationContext的实例化过程。回头看看《Spring启动<一>》中org.springframework.web.context.ContextLoader中的方法protected WebApplicationContext createWebApplicationContext(ServletContext sc, ApplicationContext parent)的剩下部分代码,代码如下:

ServletContext sc = ...;
ConfigurableWebApplicationContext wac = ...;
//wac实例化之后的代码
if (sc.getMajorVersion() == 2 && sc.getMinorVersion() < 5) {
    // Servlet <= 2.4: resort to name specified in web.xml, if any.
    String servletContextName = sc.getServletContextName();
    wac.setId(ConfigurableWebApplicationContext.APPLICATION_CONTEXT_ID_PREFIX +
    ObjectUtils.getDisplayString(servletContextName));
}else {
    // Servlet 2.5's getContextPath available!
    try {
        String contextPath = (String) ServletContext.class.getMethod("getContextPath").invoke(sc);
        wac.setId(ConfigurableWebApplicationContext.APPLICATION_CONTEXT_ID_PREFIX +
        ObjectUtils.getDisplayString(contextPath));
    }catch (Exception ex) {
        throw new IllegalStateException("Failed to invoke Servlet 2.5 getContextPath method", ex);
    }
}

wac.setParent(null);
wac.setServletContext(sc);
wac.setConfigLocation(sc.getInitParameter(CONFIG_LOCATION_PARAM));
customizeContext(sc, wac);
wac.refresh();

    这些代码可以分为两个部分来看,第一部分是if...else...语句中的内容,这一部分根据当前Servlet容器支持的Servlet版本来取一个值,从而调用wac.setId(String id)。查看源代码可以知道,setId方法的是XmlWebApplicationContext的一个祖先类org.springframework.context.support.AbstractApplicationContext中提供的。该类的注释是“Set the unique id of this application context.Default is the object id of the context instance, or the name of the context bean if the context is itself defined as a bean.”

    第二部分中,wac.setParent(null),wac.setServletContext(sc), wac.setConfigLocation(sc.getInitParameter(CONFIG_LOCATION_PARAM))均只是简单的赋值操作,尤其setConfigLocation是将spring配置文件的路径传入进去了。customizeContext(sc, wac)调用的是org.springframework.web.context.ContextLoader中的对应方法。该方法默认是个空方法。

    走到最后一步wac.refresh().通过查找发现,这个方法的实现在XmlWebApplicationContext的一个祖先类org.springframework.context.support.AbstractApplicationContext中。下一篇我们就要看看在这一步操作中,系统做了哪些操作。

 

 

 

 

分享到:
评论

相关推荐

    spring-web-2.5.jar

    org.springframework.web.context.support.XmlWebApplicationContext.class org.springframework.web.filter.AbstractRequestLoggingFilter.class org.springframework.web.filter.CharacterEncodingFilter.class ...

    XmlWebApplicationContext的Resource定位时序图

    XmlWebApplicationContext的Resource定位时序图啊啊啊啊

    spring源代码解析

    而一般的启动过程,Spring会使用一个默认的实现,XmlWebApplicationContext – 这个上下文实现作为在web容器中的根上下文容器被建立起来,具体的建立过程在下面我们会详细分析。 Java代码 public class ...

    spring-learning:我的学习Spring和Spring Boot的笔记

    Spring学习 此存储库包含有关对Spring Framework(v5.2.x)和Spring Boot(v2.4.x)的源代码进行分析的学习笔记。 我试图使这些注释尽可能地易于理解,因此,我主要将这些注释组织成图表,并结合一些微小的代码片段...

    SPRING API 2.0.CHM

    All Classes AbstractAdvisorAutoProxyCreator AbstractApplicationContext AbstractApplicationEventMulticaster AbstractAspectJAdvice AbstractAspectJAdvisorFactory AbstractAspectJAdvisorFactory....

Global site tag (gtag.js) - Google Analytics