spring启动流程

作为一个合格的程序员,今天第一次写博客
在昨天从网上找了一个帖子。做了一个最简单的springmvc+spring的框架项目。
我以前是弄ssh框架的,换了一个框架就要好好看一看。
所有的web项目都是从web.xml开始启动(有人说从tomcat启动也可以,顺带说一句当我们用tomcat部署时,会把所有部署在tomcat中的项目的web.xml文件都读一遍。所以在start一个新项目时最好把以前的项目关掉,好处以后讲)
换汤不换药还是这几样:

 <listener>  
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
    </listener>  
当读到这里时会初始化spring的根容器,这个容器是用来自动装配ApplicationContext.xml的配置信息,其实spring的自动注入(DI)就是从这里开始的。

如果大家留意项目刚刚启动的信息(就是console下的那些红色信息),当tomcat启动之后,它会跳出这样的句话:

信息: Initializing Spring root WebApplicationContext
二月 16, 2015 2:26:11 下午 org.springframework.web.context.ContextLoader initWebApplicationContext
信息: Root WebApplicationContext: initialization started
二月 16, 2015 2:26:11 下午 org.springframework.context.support.AbstractApplicationContext prepareRefresh
信息: Refreshing Root WebApplicationContext: startup date [Mon Feb 16 14:26:11 CST 2015]; root of context hierarchy
二月 16, 2015 2:26:11 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from ServletContext resource [/WEB-INF/applicationContext.xml]
二月 16, 2015 2:26:12 下午 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@26dd85: defining beans [dataSource]; root of factory hierarchy
二月 16, 2015 2:26:12 下午 org.springframework.web.context.ContextLoader initWebApplicationContext
信息: Root WebApplicationContext: initialization completed in 325 ms

->Initializing Spring root WebApplicationContext(spring容器正在初始化)

->initialization started(初始化开始),这时如果可以打breakpoint的话,spring-web的jar包下面(我用的是 3.0.5的版本)这里写图片描述

回头一看既然有一个叫ContextLoaderListener的类,打开一看豁然开朗,这个了继承的ContextLoader类,实现的ServletContextListener接口。这就是设计者有意思的地方,ServletContextListener在监听到在tomcat启动就将执行contextInitialized()这个方法。而在ContextLoaderListener()中重写的里面的方法。在监听到tomcat启动之后立马让ContextLoader去初始化WebApplicationContext,然后创建WebApplicationContext

在ContextLoader类中会看到“contextConfigLocation”这样熟悉字符串,这也解释的为什么在web.xml中这些参数不能写错:在最底层用的是反射。

->prepareRefresh(准备生产)在这里我们可以在AbstractApplicationContext中看到开始有beanfactor,具体在这个类下:
这里写图片描述

->loadBeanDefinitions(解析ApplicationContext.xml生成dom,在用dom得到bean配置)

->preInstantiateSingletons(开始创建beans,并且是单列的,同时注入spring容器)

->WebApplicationContext: initialization completed(spring容器初始化完成)
其实这些只是大概过程,许多细节没提。如果有不正确的地方欢迎大家指正!qq:1337343005,邮箱: liushaoshuai@airad.com

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值