springmvc无web.xml启动原理如何理解

 时间:2024-10-12 09:40:39

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

springmvc无web.xml启动原理如何理解

2、WebInitializer文件继承spring的WebApplicationI艘绒庳焰nitializer类,在启动web项目的时候,容器会回调这个类的onStartup方法,那么是如何回调的呢,我们点击进去spring的源码查看可以知道,当然这需要结合源码注释分析下逻辑,这里我们直接通过debug断点的方式,快速找到调用onStartup方法的spring和tomcat的类方法,在onStartup上标记断点信息,然后启动项目,断点挂起之后,在调用栈上找到上层代码类和方法,如图所示,tomcat的StandardContext调用了SpringServletContainerInitializer的onStartup方法,断点的方式最大的好处就是,定位迅速,并且可以直接双击,跳转到对应类的源码位置

springmvc无web.xml启动原理如何理解

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

springmvc无web.xml启动原理如何理解

4、然后查看SpringServletContainerInitializer方法onStartup的源码,Set<Class媪青怍牙<?>> webAppInitializerClasses参数是web容器传递进来的,传递的就是@HandlesTypes注解标注的类型以及子类。webAppInitializerClasses实例化之后调用onStartup方法,就是我们第一步创建的WebInitializer类的onStartup方法,因为WebInitializer就是注解@HandlesTypes标记的子类型,容器会将所有的@HandlesTypes标记的类型扫描出来,然后放到Set中传递过来

springmvc无web.xml启动原理如何理解
springmvc无web.xml启动原理如何理解

5、实例化SpringServletContainerInitializer类和扫描@HandlesTypes标记类型,是web容器实现的,这里我们用的web容器就tomcat,所以查看tomcat源码就可以了解内部的实现逻辑,tomcat的ContextConfig类的processServletContainerInitializers方法就是处理逻辑的入口

springmvc无web.xml启动原理如何理解

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

springmvc无web.xml启动原理如何理解

7、去除Suspend前面的勾选,去除勾选表示执行到断点代码不会挂起停下来,然后勾选Log evaluated expresstion前面的勾,在下方的输入框中填入javaClass.getClassName()表达式,打印扫描的类名到控制台

springmvc无web.xml启动原理如何理解

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

springmvc无web.xml启动原理如何理解
  • 怎么找到QQ悄悄话
  • 手机QQ如何设置特别关心
  • QQ怎样绑定与好友的亲密关系?
  • qq匿名聊天怎么开通
  • 热门搜索
    做一个有道德的人手抄报 冠状病毒手抄报 依依惜别手抄报 防控疫情的手抄报 过年的手抄报 关于马的手抄报 新年手抄报简单又漂亮 元宵节手抄报内容资料 关于新年的手抄报 英雄事迹手抄报