美文网首页
SpringMvc初始化HandlerAdapters(五)

SpringMvc初始化HandlerAdapters(五)

作者: 昨日已逝去 | 来源:发表于2019-05-24 10:28 被阅读0次

    github原文链接 https://github.com/DespairYoke/java-advance。创作不易,请给个免费的star,已表支持。

    从onRefresh入手

    protected void onRefresh(ApplicationContext context) {
        initStrategies(context);
    }
    
    protected void initStrategies(ApplicationContext context) {
        initMultipartResolver(context);
        initLocaleResolver(context);
        initThemeResolver(context);
        initHandlerMappings(context);
        initHandlerAdapters(context);
        initHandlerExceptionResolvers(context);
        initRequestToViewNameTranslator(context);
        initViewResolvers(context);
        initFlashMapManager(context);
    }
    

    initHandlerAdaptersinitStrategies方法中被调用。

    private void initHandlerAdapters(ApplicationContext context) {
    
        this.handlerAdapters = getDefaultStrategies(context, HandlerAdapter.class);
    
    }
    

    handlerMapping的处理方式类似,都是从DispatcherServlet.properties文件中加载要处理的类型。

    org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\
        org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\
        org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter
    

    从配置文件中发现有三个adapter供给我们处理。
    下面对每个类是否有afterPropertiesSet方法回调。

    • HttpRequestHandlerAdapter 没有
    • SimpleControllerHandlerAdapter 没有
    • RequestMappingHandlerAdapter 有

    所以只有RequestMappingHandlerAdapter回调了afterPropertiesSet方法。

    public void afterPropertiesSet() {
        // Do this first, it may add ResponseBody advice beans
        initControllerAdviceCache();
    
        if (this.argumentResolvers == null) {
            List<HandlerMethodArgumentResolver> resolvers = getDefaultArgumentResolvers();
            this.argumentResolvers = new HandlerMethodArgumentResolverComposite().addResolvers(resolvers);
        }
        if (this.initBinderArgumentResolvers == null) {
            List<HandlerMethodArgumentResolver> resolvers = getDefaultInitBinderArgumentResolvers();
            this.initBinderArgumentResolvers = new HandlerMethodArgumentResolverComposite().addResolvers(resolvers);
        }
        if (this.returnValueHandlers == null) {
            List<HandlerMethodReturnValueHandler> handlers = getDefaultReturnValueHandlers();
            this.returnValueHandlers = new HandlerMethodReturnValueHandlerComposite().addHandlers(handlers);
        }
    }
    

    这里只是填充了argumentResolversinitBinderArgumentResolversreturnValueHandlers,这些参数都是对参数和返回值的处理集合,后续文章会做详情介绍。

    相关文章

      网友评论

          本文标题:SpringMvc初始化HandlerAdapters(五)

          本文链接:https://www.haomeiwen.com/subject/hggwzqtx.html