文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
1.4 HandlerAdapter 初始化
同样,我们以 RequestMappingHandlerAdapter 为例进行说明,类图:

显然,入口在 afterPropertiesSet 方法:
@Override
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);
}
}
@ControllerAdvice
initControllerAdviceCache 方法用以解析并存储标注了 @ControllerAdvice 的 bean,这东西是干什么的参考:
Spring3.2 新注解 @ControllerAdvice
参数解析器
HandlerMethodArgumentResolver 即参数解析器,负责从 request 中解析、得到 Controller 方法所需的参数。afterPropertiesSet 方法设置了一组默认的解析器。具体是哪些参考 getDefaultArgumentResolvers 方法。类图:

@InitBinder 支持
此注解定义的其实是自定义类型转换器。使用方法参考:
getDefaultInitBinderArgumentResolvers 返回了一组默认使用的转换器,不过其实这里的转换器和上面的参数解析器其实是一个类型的,这里留个坑。
返回结果解析器
HandlerMethodReturnValueHandler 接口用以处理方法调用(Controller 方法) 的返回值,类图:

getDefaultReturnValueHandlers 方法便返回了一坨这东西。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论