SpringMVC是如何与我们的Spring容器整合的?它的工作机制又是如何?下面我们将通过源码来一起揭开它的神秘面纱。
谈到SpringMVC就离不开我们的servlet,在servlet3.0规范中当容器启动时会寻找每一个jar包下的SevletContainerInitializer接口实现类,执行实现类的onStartup()方法。那么容器是如何去寻找jar包中的接口实现类的呢?它会扫描每个jar包下元数据文件META-INF下的services文件夹中有没有以接口全类名命名的文件javax.servlet.ServletContainerInitializer,如果存在此文件那么文件中的内容就是接口实现类的类名:
通过接口实现全类名找到SpringServletContainerInitializer类。
@HandlesTypes(WebApplicationInitializer.class)
public class SpringServletContainerInitializer implements ServletContainerInitializer {
@Override
public void onStartup(@Nullable Set<Class<?>> webAppInitializerClasses, ServletContext servletContext)
throws ServletException {
List<