SpringMvc中的HandlerAdapter

MVC框架的接口,允许参数化核心的mvc流程

接口必须被实现,用于每个处理器类型处理一种请求。这个接口使得DispatcherServlet能够无限制的扩展。DispathcerServlet通过这个接口访问所有已经安装好的handler.,意味着他没有包含特定于某个处理类型的代码。

public interface HandlerAdapter {

	/**
     * 判断是否支持给定的handler,单纯的判定Controller的类型。
	 */
	boolean supports(Object handler);

	/**
	 * 使用给定的handler来处理请求
	 */
	ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception;

	/**
	 * Same contract as for HttpServlet's {@code getLastModified} method.
	 * 在处理器是LastModified类型的情况下才会返回真实数据,其余返回-1.
	 */
	long getLastModified(HttpServletRequest request, Object handler);

}

大概的意思就是每种类型的Controller,需要特定的HandlerAdapter进行处理。而SpringMVC为我们提供一些HandlerAdapter.

SimpleControllerHandlerAdapter 处理器需要实现Controller接口

	public boolean supports(Object handler) {
		return (handler instanceof Controller);
	}

,SimpleServletHandlerAdapter 处理器需要是一个Servlet

	@Override
	public boolean supports(Object handler) {
		return (handler instanceof Servlet);
	}

HttpRequestHandlerAdapter 处理器需要实现HttpRequestHandler接口

	@Override
	public boolean supports(Object handler) {
		return (handler instanceof HttpRequestHandler);
	}

RequestMappingHandlerAdapter 处理器需要是一个HandlerMethod类型,这个应该就是被RequestMapping注解标记的处理器。这是Spring mvc 3.1开始支持的全新的功能

	@Override
	public final boolean supports(Object handler) {
		return handler instanceof HandlerMethod && supportsInternal((HandlerMethod) handler);
	}

AnnotationMethodHandlerAdapter 已经被废弃了。

你可能感兴趣的:(spring-实战)