游历SpringMVC源代码后发现,在web.xml
中注冊的ContextLoaderListener
监听器不过初始化了一个根上下文,只完毕了组件扫描和与容器初始化相关的一些工作,并没有探測到详细每一个URL应当map到哪个Controller, 哪个方法上。而剩一下的这些复杂工作都是由DispatcherServet
来完毕的,即应用server载入DispatcherServlet
调用init()
方法时才干触发这项工作。所以,假设在web.xml
中配置DispatcherServlet
时不设置
<load-on-startup>1</load-on-startup>
的话,那么非常有可能应用server会在当用户实际訪问请求到来时才载入DispatcherServlet
。这种话注冊Controller, 解析request method, 注冊RequestMapping, HandlerAdapter这种初始化工作都会在响应请求时进行,就会大大延长第一个请求的处理时间。
另外,DispatcherServlet
持有了根容器的子容器引用,大量的状态信息都保存在它和它的父类其中。假设这个servlet中途被应用server销毁。那么也会带来又一次载入的时间开销。
以上仅理论猜測。未实际測试