快捷搜索:  汽车  科技

tomcat运行springboot项目(Tomcat是如何启动Spring项目的)

tomcat运行springboot项目(Tomcat是如何启动Spring项目的)web.xml配置:tomcat加载web.xml中的servlet会调用servlet的init()方法,DispatcherServlet实现了servlet接口,在其父类HttpServletbean中也实现了init()方法,init()方法中就实现了SpringMVC的整个启动流程。下面看下源码:在initWebApplicationContext方法中会通过ServletContext获取上面配置的contextConfigLocation参数:然后会调用SpringIOC容器refresh()方法初始化容器:剩下的就是Spring容器初始化的流程了,和带main方法的spring工程启动流程基本一样。

tomcat加载Spring IOC流程

tomcat在启动servletContext容器的时候会发布ServletContextEvent事件。Spring就通过实现ServletContextListener接口,监听该事件来监听ServletContext的生命周期。

web.xml配置spring IOC配置文件:

tomcat运行springboot项目(Tomcat是如何启动Spring项目的)(1)

Spring中ContextLoaderListener实现了ServletContextListener接口:

tomcat运行springboot项目(Tomcat是如何启动Spring项目的)(2)

对ServletContext启动监听:

tomcat运行springboot项目(Tomcat是如何启动Spring项目的)(3)

在initWebApplicationContext方法中会通过ServletContext获取上面配置的contextConfigLocation参数:

tomcat运行springboot项目(Tomcat是如何启动Spring项目的)(4)

tomcat运行springboot项目(Tomcat是如何启动Spring项目的)(5)

然后会调用SpringIOC容器refresh()方法初始化容器:

tomcat运行springboot项目(Tomcat是如何启动Spring项目的)(6)

剩下的就是Spring容器初始化的流程了,和带main方法的spring工程启动流程基本一样。

tomcat是如何启动SpringMVC的?

tomcat加载web.xml中的servlet会调用servlet的init()方法,DispatcherServlet实现了servlet接口,在其父类HttpServletbean中也实现了init()方法,init()方法中就实现了SpringMVC的整个启动流程。下面看下源码:

web.xml配置:

tomcat运行springboot项目(Tomcat是如何启动Spring项目的)(7)

使用springMVC需要配置前端控制器DispatcherServlet,该类实现了servlet接口,所以就是个servlet。

tomcat运行springboot项目(Tomcat是如何启动Spring项目的)(8)

在HttpServletBean中实现了init()方法:

方法中会获取contextConfigLocation配置,然后调用onRefresh()方法初始化容器。

tomcat运行springboot项目(Tomcat是如何启动Spring项目的)(9)

在SpringMVC容器初始化的时候,如果有springIOC容器,会将SpringIOC容器设置威mvc的父容器:

tomcat运行springboot项目(Tomcat是如何启动Spring项目的)(10)

SpringMVC和SpringIOC容器关系

tomcat运行springboot项目(Tomcat是如何启动Spring项目的)(11)

SpringMVC容器是SpringIOC的子容器,MVC容器中的bean能注入SpringIOC中的bean,反之则不能。

猜您喜欢: