当前位置: 首页 > >

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;,最后会清除共有变量的缓存;



友情链接: