阿古达芝麻开门 - 博客园

Springboot如何集成SpringMVC

在autoconfigure模块的spring.factories中,有自动配置类DispatcherServletAutoConfiguration:

图片

进入这个配置类,可以知道这个自动配置只有是Web Application并且发现有DispatcherServlet类的时候才会生效。

图片

那么是什么时候加载这个配置类的呢?

图片

上图的start会调用LifecycleBase#start方法,接着会调用LifecycleBase#init方法,然后会调用initInternal(),最后会调用StandardServer#startInternal,在这个方法里面,会调用StandardContext#startInternal这个方法,然后循环调用initializer的onStartup:

图片

图片

onStartUp方法会回调去执行ServletWebServerApplicationContext的selfInitialize方法,ServletContextInitializerBeans 从beanFactory中获取spring容器中所有的ServletContextInitializer实现(filter列表以及servlet都添加进去)

图片

其中留意getServletContextInitializerBeans回去創建type是ServletContextInitializer的bean

图片

图片

出乎我意料的是獲取到的bean names是dispatcherServletRegistration?然後T bean = beanFactory.getBean(name, type);根據name=dispatcherServletRegistration,type=org.springframework.boot.web.servlet.ServletContextInitializer去創建bean,原來根據dispatcherServletRegistration從缓存中获取到了下面的BeanDefinition:

图片

图片

这里找到了一个重要的自动配置类DispatcherServletAutoConfiguration

然后就是开始根据这个BeanDefinition开始创建Bean了吧,创建Bean的过程中,调用了一个Factory Method:

图片

图片

嗯,这里开始创建org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration$DispatcherServletRegistrationConfiguration,getBean又开始调用doGetBean:

图片

实例化bean的时候会调用构造方法,紧接着实例化DispatcherServlet:

图片

图片

 

以上大部分都是讲怎么获取到核心的配置类,怎么创建DispatcherServlet,创建完成后,ServletContextInitializer最终返回下面两个bean:

图片

图片

獲取到ServletContextInitializer的bean之後,會執行

beans.onStartup(servletContext),主要执行了RegistrationBean,EchoServer,dispatcherServletRegistration...逐个把这些bean注册到ServletContext中.

 

更多了解请关注一米源码公众号并回复SpringBoot或https://itproject-manager.com/

posted @   阿古达芝麻开门  阅读(277)  评论(0编辑  收藏  举报
编辑推荐:
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
点击右上角即可分享
微信分享提示