一、AbstractAnnotationConfigDispatcherServletInitializer类在onStartup已经帮我们注册了spring mvc dispatchservlet,留有部分接口供我们扩展实现创建root容器,springmvc容器,以及mapping 的url

 

二、例

public class SpringMvcContainerInitializer extends
        AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[] { RootConfig.class };
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[] {ServletConfig.class};
    }

    /**
     * /*:会拦截所有请求,包括*.jsp /:不会拦截*.jsp
     */
    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }
}
@ComponentScan(value={"com.suxiaodong"}, excludeFilters={
        @Filter(type=FilterType.ANNOTATION, value = {Controller.class})
})
@Configuration
public class RootConfig {

}
@ComponentScan(value={"com.suxiaodong"}, includeFilters = {
        @Filter(type=FilterType.ANNOTATION, value = {Controller.class})
},useDefaultFilters = false)
@EnableWebMvc
@Configuration
public class ServletConfig extends WebMvcConfigurerAdapter {
    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        registry.jsp("/WEB-INF/", ".jsp");
    }
    
    @Override
    public void configureDefaultServletHandling(
            DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }
    //添加拦截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");
    }
}
public class MyInterceptor implements HandlerInterceptor{
    @Override
    public boolean preHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler) throws Exception {
        return true;
    }

    //目标方法执行正确以后执行
    @Override
    public void postHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        
    }

    //页面响应以后执行
    @Override
    public void afterCompletion(HttpServletRequest request,
            HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        System.out.println("afterCompletion");
    }

}