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/
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)