我们用一个@EnableWebMvc 就可以完全取代 xml 配置,其实两者完成的工作是一样的,
    都是为了创建必要组件的实例

    取代 springmvc.xml 配置 - 图1




    @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 等等。如图:

    取代 springmvc.xml 配置 - 图2

    取代 springmvc.xml 配置 - 图3

    然后在实例化过程中会涉及到很多钩子方法的调用,而这些钩子方法就是我们需要去实现
    的,比如获取拦截器的钩子方法,获取静态资源处理的钩子方法等等。如图:

    取代 springmvc.xml 配置 - 图4