浅析SpringMVC中的适配器HandlerAdapter

网友投稿 303 2022-11-06


浅析SpringMVC中的适配器HandlerAdapter

DispatcherServlte的initHandlerAdapters方法根据配置文件信息把HandlerAdapter注册到handlerAdapters(List)中。

如果在配置文件中没有配置,默认配置会读取DispatcherServlte.properties文件,该文件中配置了三种Handlehttp://rAdapter:HttpRequestHandlerAdapter,SimpleControllerHandlerAdapter和AnnotationMethodHandlerAdapter。

SimpleControllerHandlerAdapter :继承Controller方式所使用的适配器

HttpRequestHandlerAdapter :HTTP请求处理器适配器

RequestMappingHandlerAdapter :注解方式(@Controller)的处理器适配器

getHandler方法根据请求遍历注册到handlerAdapters中的适配器拿到对应的适配器处理。

for (HandlerMapping hm : this.handlerMappings) {

HandlerExecutionChainhttp:// handler = hm.getHandler(request);

if (handler != null) {

return handler;

}

}

HandlerAdapter接口有三个方法:

supports方法:是判断该适配器是否支持这个HandlerMethod,就是当得到一个handler时,该接口子类该方法做判断(就是类似handler instanceof Controller的判断方式),用来得到适配这个handler的适配器子类。

handle方法:用来执行控制器处理函数,获取ModelAndView 。就是根据该适配器调用规则执行handler方法。

如果正常编写调用,就需要使用多个if else判断instance of

if(handler instanceof HttpRequestHandler){

handle1();//HttpRequestHandler的处理方式

} else if (handler instanceof Controller){

handle2();//Controller的处理方式

} else if (handler instanceof Servlet){

handle3();//Servlet的处理方式

}

这种方法再添加新的处理器实现方式,就需要修改源码,新增else添加处理逻辑,不符合对扩展开放,对修改关闭原则。使用了HandlerAdapter后,当需要新增一种处理器(Controller)时,只需要新增一个HandlerAdapter即可,判断逻辑在他的supports方法中,处理逻辑在handle中,不需要修改任何其他代码。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:如何mock模拟接口(mockito mock接口)
下一篇:微信开放平台接口测试(微信接口开发平台)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~