【springMVC源码分析】DispatchServlet初始化原理过程

查看DispatchServlet的继承关系如下:

上面也说了,所有的servlet都是Servlet接口的实现类,所以都有init方法

当我们的servlet注册进servlet容器后,并不会马上执行init方法初始化

tomcat源码:

而是tomcat会在首次调用此servlet处理请求时,才会调用init方法

依次向下调用,initServletBean

依次向下调用,initWebApplicationContext  初始化Web应用上下文,中有onRefresh方法

执行DispatchServlet类的onRefresh方法

最终进行了各种组件的初始化,如文件上传解析器、处理器映射器、处理器解析器、视图解析器等。

这些组件都是从ApplicaitonContext中拿的,也就是从IOC容器中取的。

那这些组件何时被放入IOC容器的?

是在springboot的WebMvcAutoConfiguration类中有配置类并且有@bean注解,所以在启动时,spring就会创建bean到ioc容器中了。

如果要扩展则只需要实现对应的接口,注册到容器中即可。如实现MultipartResolver接口,可以自定义文件上传解析器。

直接注册到容器就可以生效是因为springboot实现了它的自动配置。由@ConditionalOnMissingBean注解可以得知,当已经存在了MultipartResolver接口的实现类的时候,就不会初始化它的了。

猜你喜欢

转载自blog.csdn.net/sumengnan/article/details/113773715