圖解源碼 | SpringBoot中拓展SpringMVC原理

圖片



@Configuration
public class FeichaoMvcConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new HandlerInterceptor() {

            public boolean preHandle(HttpServletRequest request,
                                     HttpServletResponse response,
                                     Object handler)
 throws Exception 
{
                System.out.println("公衆號:肥朝(id:feichao_java),preHandle");
                return true;
            }

            public void postHandle(HttpServletRequest request,
                                   HttpServletResponse response,
                                   Object handler,
                                   ModelAndView modelAndView)
 throws Exception 
{
                System.out.println("公衆號:肥朝(id:feichao_java),postHandle");
            }

            public void afterCompletion(HttpServletRequest request,
                                        HttpServletResponse response,
                                        Object handler,
                                        Exception ex)
 throws Exception 
{
                System.out.println("公衆號:肥朝(id:feichao_java),afterCompletion");
            }
        });
    }

}


圖片


圖解源碼

        

圖片

圖片


整個過程肥朝小聲逼逼幾句:java

1.根據spring.factories上的自動配置,加載WebMvcAutoConfiguration,根據序號流程咱們知道,最後會把全部的WebMvcConfigurer,都加載進名爲delegates的數組中。咱們自定義的FeichaoMvcConfig就是WebMvcConfigurer的子類。spring

2.WebMvcConfigurationSupportDelegatingWebMvcConfiguration的父類。從序號流程咱們知道,此時就是把第一步的delegates數組,遍歷(WebMvcConfigurer)調用addInterceptor。addInterceptor這個是SpringMvc的api,從單詞名字,咱們也很容易知道其意圖,這就是所謂的,好的代碼會說話。api

3.幻想無數,不如動次真格!本身對着上面的圖調試一次,箭頭和序號都給你標記好了,若是再有人再怎麼看源碼,請把這個圖解源碼系列甩給他。數組

寫在最後

111111111111111111111111111111111111111111111111111111111111111111111111111111ide

圖片

相關文章
相關標籤/搜索