Spring MVC : 概念模型 HandlerMethod

Spring MVC应用启动时会搜集并分析每个Web控制器方法,从中提取对应的"<请求匹配条件,控制器方法>“映射关系,形成一个映射关系表保存在一个RequestMappingHandlerMapping bean中。然后在客户请求到达时,再使用RequestMappingHandlerMapping中的该映射关系表找到相应的控制器方法去处理该请求。在RequestMappingHandlerMapping中保存的每个”<请求匹配条件,控制器方法>"映射关系对儿中,"请求匹配条件"通过RequestMappingInfo包装和表示,而"控制器方法"则通过HandlerMethod来包装和表示。

一个HandlerMethod对象,可以认为是对如下信息的一个包装 :

信息名称介绍
Object beanWeb控制器方法所在的Web控制器bean。可以是字符串,代表bean的名称;也可以是bean实例对象本身。
Class beanTypeWeb控制器方法所在的Web控制器bean的类型,如果该bean被代理,这里记录的是被代理的用户类信息
Method methodWeb控制器方法
Method bridgedMethod被桥接的Web控制器方法
MethodParameter[] parametersWeb控制器方法的参数信息:所在类所在方法,参数,索引,参数类型
HttpStatus responseStatus注解@ResponseStatuscode属性
String responseStatusReason注解@ResponseStatusreason属性

HandlerMethod最主要的使用位置:

RequestMappingHandlerMapping#afterPropertiesSet
RequestMappingHandlerMapping#initHandlerMethods
AbstractHandlerMethodMapping#detectHandlerMethods
AbstractHandlerMethodMapping#registerHandlerMethod
AbstractHandlerMethodMapping$MappingRegistry#register
AbstractHandlerMethodMapping#createHandlerMethod

注意 : AbstractHandlerMethodMappingRequestMappingHandlerMapping的基类。

AbstractHandlerMethodMapping#createHandlerMethod方法实现如下 :

	/**
	 * Create the HandlerMethod instance.
	 * @param handler either a bean name or an actual handler instance
	 * @param method the target method
	 * @return the created HandlerMethod
	 */
	protected HandlerMethod createHandlerMethod(Object handler, Method method) {
		HandlerMethod handlerMethod;
		if (handler instanceof String) {
			// handler 是Web控制器类名称的情况(通常都是这种情况)
			String beanName = (String) handler;
			handlerMethod = new HandlerMethod(beanName,
					obtainApplicationContext().getAutowireCapableBeanFactory(), method);
		}
		else {
			// handler 是Web控制器bean实例的情况
			handlerMethod = new HandlerMethod(handler, method);
		}
		return handlerMethod;
	}
  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值