我们用一个@EnableWebMvc 就可以完全取代 xml 配置,其实两者完成的工作是一样的,
都是为了创建必要组件的实例
@EnableWebMvc类会import一个核心类
org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration(WebMvcConfigurationSupport子类)
在这个类里面会完成很多组件
其中核心方法org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration#setConfigurers
注入了实现WebMvcConfigurer接口的类,就是我们程序员编写的AppConfig类
然后接着调用
org.springframework.web.servlet.config.annotation.WebMvcConfigurerComposite#addWebMvcConfigurers
DelegatingWebMvcConfiguration这个类又继承了
org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport ,这个类就是一个最最核心的一个类了.这个类很大.
这个类其中一个org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport#requestMappingHandlerMapping
这个类是创建RequestMappingHandlerMapping的,在这个类里面设置了拦截器,
org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport#getInterceptors,这个拦截器是钩子方法,程序员可以根据业务进行手动设置.
的实例化,比如 HandlerMapping,HandlerAdapter 等等。如图:
然后在实例化过程中会涉及到很多钩子方法的调用,而这些钩子方法就是我们需要去实现
的,比如获取拦截器的钩子方法,获取静态资源处理的钩子方法等等。如图: