Spring mvc零配置启动
- 运用spi技术加载spring-web.jar 下面的META-INF/services/java.servlet.ServletContainerInitializer文件
- ServletContainerInitializer类中的@HandlerTypes注解会加载所有的实现了WebApplicationInitializer接口的类
- 所有被加载的类,会被放到onStartup方法的参数中,
- onStartup方法会实例化所有实现了WebApplicationInitializer接口的类,并调用他们的onStartup方法
- 在onStartup方法中会调用父类的onStartup方法,创建servletListener用来初始化Spring容器
- 在onStartup方法中还会创建DispatcherServlet对象,DispatcherServlet对象的init方法会加载Spring mvc容器,被设置Spring容器为它的父容器
- HandlerMapping、HandlerAdapter、ViewResolver实例的实例化,是借助@EnableWebmMvc和@Bean实现的的,在@Bean中会有钩子方法,会调用父类的方法,而父类会通过@Autowired注解将所有实现了WebMvcConfigurer的实例加入到类属性中,方便用户自定义HandlerMapping、HandlerAdapter、ViewResolver
一个接口调用的流程
- servlet的service方法
- 调用JDK的super.service方法
- 区分请求类型,回调到spring-mvc包中的doGet/doPost/doPut/doDelete方法
- 都会统一调用processRequest方法
- 在processRequest中会调用doService方法
- 在doService方法中会调用doDispatch方法