Spring启动<二>——XmlWebApplicationContext

在上一篇《Spring启动<一>》中,我们已经看到了Spring的启动过程的核心就是XmlWebApplicationContext的实例化及对其属性的设置。这一篇我们看看XmlWebApplicationContext实例化的过程,我们有如下的代码:

Java代码   收藏代码
  1. ConfigurableWebApplicationContext wac =  
  2.         (ConfigurableWebApplicationContext) BeanUtils.instantiateClass(XmlWebApplicationContext.class);  

    这一步简单的对XmlWebApplicationContext进行实例化。XmlWebApplicationContext没有提供构造器,因此使用默认的构造器。通过源代码知道,XmlWebApplicationContext涉及到以下几个类:

  • A : org.springframework.web.context.support.AbstractRefreshableWebApplicationContext
  • B : org.springframework.context.support.AbstractRefreshableConfigApplicationContext
  • C : org.springframework.context.support.AbstractRefreshableApplicationContext
  • D : org.springframework.context.support.AbstractApplicationContext
  • E : org.springframework.core.io.DefaultResourceLoader

    XmlWebApplicationContext依次继承于它们,并在继承过程中实现若干接口,示意如下:XmlWebApplicationContext extends A, A extends B, B extends C, C extends D, D extends E。因此在XmlWebApplicationContext通过默认构造器实例化的时候我们要依次查看E、D、C、B、A的构造器都做了什么。XmlWebApplicationContext以及A、B、C、D、E的构造器代码如下:

Java代码   收藏代码
  1. public XmlWebApplicationContext(){  
  2.     super();  
  3. }  
  4.   
  5. public A() {  
  6.     super();  
  7.     setDisplayName("Root WebApplicationContext");  
  8. }  
  9.   
  10. public B() {  
  11.     super();  
  12. }  
  13.   
  14. public C() {  
  15.     super();  
  16. }  
  17.   
  18. public D() {  
  19.     this(null);  
  20. }  
  21.   
  22. public D(ApplicationContext parent) {  
  23.     super();  
  24.     this.parent = parent;  
  25.     this.resourcePatternResolver = getResourcePatternResolver();  
  26. }  
  27.   
  28. public E() {  
  29.     this.classLoader = ClassUtils.getDefaultClassLoader();  
  30. }  

   根据构造器的执行顺序,先看构造器E,通过查看源代码知道这一步的实质等同于如下语句:

Java代码   收藏代码
  1. private ClassLoader classLoader = Thread.currentThread().getContextClassLoader();  

    再看D的构造器,有两个语句,第一步只是简单的赋值this.parent = null, 第二步执行了一个方法返回一个值,查看该方法的注释我们得知,该方法返回的是一个ResourcePatternResolver实现类,该类用来处理将路径指向的资源实例化,默认的类是org.springframework.core.io.support.PathMatchingResourcePatternResolver,该类支持ant样式的路径。

    构造器C是个默认构造器,没有执行任何操作。

    构造器B是个默认构造器,没有执行任何操作。

    构造器A中调用了一个方法,public void setDisplayName(String displayName)方法在类D中定义,只是进行简单的赋值操作。

     到这里XmlWebApplicationContext就实例化成功了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值