Web容器启动Spring

Web工程启动涉及到的内容:

         1.当Tomcat启动的时候,通过BootStrap的main方法启动,加载tomcat包下的类,读取包下的配置文件,读取Web.xml配置文件,创建ServletConfig对象,从而创建ServletContext对象,整个web容器的上下文对象,可以初始化参数等

2.配置在web.xml中的监听器ContextLoaderListener继承了ContextLoader类,实现了ServletContextListener接口,当ServetContext对象创建的时候,会执行有ServletContextEvent参数的contextInitialized方法,

创建一个WebApplicationConetxt对象,

 

 

采用监听器方式启动,所以最终得到的ApplicationContext对象是ConfigurableWebApplicationContext对象;然后开始配置上下文和刷新上下文对象;

然后定制上下文对象,根据所设置的参数,解析配置,初始化对象

然后开始刷新上下文对象

1.prepareRefresh()方法

设置spring上下文的刷新时间,并将active设为true,初始化一些容器启动必要的资源。

2. obtainFreshBeanFactory()方法;

创建新的bean工厂,并生成bean的定义信息

3. prepareBeanFactory()方法,

配置标准的beanFactory,设置ClassLoader,设置SpEL表达式解析器等;提前注册特殊的单例Bean

4、postProcessBeanFactory(beanFactory);

模板方法,允许在子类中对beanFactory进行后置处理。

5、invokeBeanFactoryPostProcessors(beanFactory);

实例化并调用所有注册的beanFactory后置处理器(实现接口BeanFactoryPostProcessor的bean,在beanFactory标准初始化之后执行)。

6、registerBeanPostProcessors(beanFactory);

实例化和注册beanFactory中扩展了BeanPostProcessor的bean。

7、initMessageSource();

初始化国际化工具类MessageSource

8、initApplicationEventMulticaster();

初始化事件广播,bean的监听器,放入bean工厂中

9、onRefresh();

模板方法,在容器刷新的时候可以自定义逻辑,不同的Spring容器做不同的事情。

10、registerListeners();

注册监听器

11、finishBeanFactoryInitialization(beanFactory);

实例化所有剩余的(非懒加载)单例
比如invokeBeanFactoryPostProcessors方法中根据各种注解解析出来的类,在这个时候都会被初始化。
实例化的过程各种BeanPostProcessor开始起作用。

12、finishRefresh();

refresh做完之后需要做的其他事情。
清除上下文资源缓存
初始化上下文的生命周期处理器,并刷新(找出Spring容器中实现了Lifecycle接口的bean并执行start()方法)。
发布ContextRefreshedEvent事件告知对应的ApplicationListener进行响应的操作

 

在此期间,如果遇到BeansException则会销毁所有的bean,并将active设置为false;,最后会清除共有变量的缓存;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值