1、为了演示,下面首先创建一个web测试项目,新建一个WebInitializer文件继承spring的WebApplicationInitializer类,WebApplicationInitializer这个文件是容器启动关键,也是替代web.xml的关键

3、tomcat容器是如何找到和实例化spring的SpringServletContainerInitializer类的呢,如图所示,在spring-web的jar文件中,有一个META-INF/services目录下javax.servlet.ServletContainerInitializer文件,这个java的spi机制的都知道,这是java的服务提供发现机制,通过这样的约束方式,容器会自动找到这个文件并根据文件中配置的类名进行实例化


6、tomcat是如何找到@HandlesTypes注解标记的所有类及子类的呢,是扫描了classpath下面所有的class文件和jar文件吗?下面我们通过ContextConfig类的checkHandlesTypes方法来分析下哪些文件被扫描和检测了,在checkHandlesTypes方法内部添加一个断点,然后右击打开Breakpoint对话框

8、然后启动项目,这个时候发现不会在断点位置停下来,而是一直在启动运行,并且在控制台会不断打印出类名,这些类名就是被扫描的目标,等启动完成之后,查看控制台所有日志,就可以知道有哪些类被加载扫描了。
