![Spring Boot实战:从0开始动手搭建企业级项目](https://wfqqreader-1252317822.image.myqcloud.com/cover/850/40107850/b_40107850.jpg)
6.2 DispatcherServlet自动配置的源码调试记录
对部分读者来说,阅读源码是一件枯燥且困难的事情,如果毫无头绪或者看不懂源码的含义是很难理解这部分内容的。为了增加可读性,笔者在本章内容中加入了在整理DispatcherServlet自动配置原理时调试代码的记录,分别在重要的类中添加了调试。
首先读者可以根据书中提示的类名和行数进行断点设置,并使用debug模式启动项目,然后自己动手调试并实际体验一次Spring Boot的启动过程。除了DispatchServlet类的注册和装载的源码,本章也包括内置Tomcat服务器的初始化和启动流程的演示源码。
SpringApplication类的第315行,如图6-5所示。
![](https://epubservercos.yuewen.com/3069E4/20862583308964806/epubprivate/OEBPS/Images/104-1.jpg?sign=1738862825-NlXinsCm1YcENHiC82wg0yID4aPnc1S7-0-a4ce55c1ed0788b4e905e5336f6d0a66)
图6-5 SpringApplication类中增加调试断点
AbstractApplicationContext类的第545行,如图6-6所示。
![](https://epubservercos.yuewen.com/3069E4/20862583308964806/epubprivate/OEBPS/Images/104-2.jpg?sign=1738862825-gzcDvpvtDvDryt8I3GLsEIQKG8JjGkAs-0-62b40a5237b106ab4185e3f4a4727bb2)
图6-6 AbstractApplicationContext类中增加调试断点
ServletWebServerApplicationContext类的第158行、第177行、第178行、第230行,如图6-7所示。
![](https://epubservercos.yuewen.com/3069E4/20862583308964806/epubprivate/OEBPS/Images/105-1.jpg?sign=1738862825-bKKRNxNF538xIDdTWtNMEORWkw4oO7K3-0-574cefd3efab7a46cc7d583d77140a7f)
图6-7 ServletWebServerApplicationContext类中增加调试断点
DispatcherServletAutoConfiguration类的第96行,如图6-8所示。
![](https://epubservercos.yuewen.com/3069E4/20862583308964806/epubprivate/OEBPS/Images/105-2.jpg?sign=1738862825-fhZqV0a7mw6v33nxZWySn82HPZiXbWqS-0-5614798a72b14dd9d6e49f2f96cc9dc3)
图6-8 DispatcherServletAutoConfiguration类中增加调试断点
TomcatServletWebServerFactory类的第193行,如图6-9所示。
![](https://epubservercos.yuewen.com/3069E4/20862583308964806/epubprivate/OEBPS/Images/106-1.jpg?sign=1738862825-Qv8SxQh8gLXHezWyRDdEUHVeN4Sc94ES-0-c971eac4414253f170e9a04d823b74db)
图6-9 TomcatServletWebServerFactory类中增加调试断点
TomcatWebServer类的第123行,如图6-10所示。
![](https://epubservercos.yuewen.com/3069E4/20862583308964806/epubprivate/OEBPS/Images/106-2.jpg?sign=1738862825-wV2MLMdTl9cDlHC9jNizlIxo4nTHWAfr-0-7db660780709e1d9f3231a88178571d2)
图6-10 TomcatWebServer类中增加调试断点
RegistrationBean类的第53行,如图6-11所示。
![](https://epubservercos.yuewen.com/3069E4/20862583308964806/epubprivate/OEBPS/Images/107-1.jpg?sign=1738862825-OCz1IgPvfofd60Xt2ITNJT8UcEWz6hiv-0-8e1d4985595e4e71f10dd02f06c287c5)
图6-11 RegistrationBean类中增加调试断点
ServletRegistrationBean类的第178行,如图6-12所示。
![](https://epubservercos.yuewen.com/3069E4/20862583308964806/epubprivate/OEBPS/Images/107-2.jpg?sign=1738862825-tUD0gEV16HLUV2DsmOmd1NGPmrY8jojC-0-2a80f72cb365307c2dac5a1729453aae)
图6-12 ServletRegistrationBean类中增加调试断点
ApplicationContext类的第853行,如图6-13所示。
![](https://epubservercos.yuewen.com/3069E4/20862583308964806/epubprivate/OEBPS/Images/108-1.jpg?sign=1738862825-FuxHI0L9FsC9wd9hHZEJgmWtNQbc3KLX-0-2cdc544cb43012cfe38b338c9f08dfb0)
图6-13 ApplicationContext类中增加调试断点
在设置断点之后,一定要使用debug模式启动项目,并且手动调试几遍,完整地走完几次启动流程,再结合源码来理解DispatcherServlet自动配置过程。