SpringMvc初始化HandlerAdapters(五)


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 resolvers = getDefaultArgumentResolvers();
        this.argumentResolvers = new HandlerMethodArgumentResolverComposite().addResolvers(resolvers);
    }
    if (this.initBinderArgumentResolvers == null) {
        List resolvers = getDefaultInitBinderArgumentResolvers();
        this.initBinderArgumentResolvers = new HandlerMethodArgumentResolverComposite().addResolvers(resolvers);
    }
    if (this.returnValueHandlers == null) {
        List handlers = getDefaultReturnValueHandlers();
        this.returnValueHandlers = new HandlerMethodReturnValueHandlerComposite().addHandlers(handlers);
    }
}

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

你可能感兴趣的:(SpringMvc初始化HandlerAdapters(五))