Spring启动<三>——XmlWebApplicationContext

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

Java代码   收藏代码
  1. ServletContext sc = ...;  
  2. ConfigurableWebApplicationContext wac = ...;  
  3. //wac实例化之后的代码  
  4. if (sc.getMajorVersion() == 2 && sc.getMinorVersion() < 5) {  
  5.     // Servlet <= 2.4: resort to name specified in web.xml, if any.  
  6.     String servletContextName = sc.getServletContextName();  
  7.     wac.setId(ConfigurableWebApplicationContext.APPLICATION_CONTEXT_ID_PREFIX +  
  8.     ObjectUtils.getDisplayString(servletContextName));  
  9. }else {  
  10.     // Servlet 2.5's getContextPath available!  
  11.     try {  
  12.         String contextPath = (String) ServletContext.class.getMethod("getContextPath").invoke(sc);  
  13.         wac.setId(ConfigurableWebApplicationContext.APPLICATION_CONTEXT_ID_PREFIX +  
  14.         ObjectUtils.getDisplayString(contextPath));  
  15.     }catch (Exception ex) {  
  16.         throw new IllegalStateException("Failed to invoke Servlet 2.5 getContextPath method", ex);  
  17.     }  
  18. }  
  19.   
  20. wac.setParent(null);  
  21. wac.setServletContext(sc);  
  22. wac.setConfigLocation(sc.getInitParameter(CONFIG_LOCATION_PARAM));  
  23. customizeContext(sc, wac);  
  24. 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中。下一篇我们就要看看在这一步操作中,系统做了哪些操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值