时间:2021-01-13来源:www.pcxitongcheng.com作者:电脑系统城
DispatcherServlte的initHandlerAdapters方法根据配置文件信息把HandlerAdapter注册到handlerAdapters(List)中。
如果在配置文件中没有配置,默认配置会读取DispatcherServlte.properties文件,该文件中配置了三种HandlerAdapter:HttpRequestHandlerAdapter,SimpleControllerHandlerAdapter和AnnotationMethodHandlerAdapter。
1 2 3 |
SimpleControllerHandlerAdapter :继承Controller方式所使用的适配器 HttpRequestHandlerAdapter :HTTP请求处理器适配器 RequestMappingHandlerAdapter :注解方式( @Controller )的处理器适配器 |
getHandler方法根据请求遍历注册到handlerAdapters中的适配器拿到对应的适配器处理。
1 2 3 4 5 6 |
for (HandlerMapping hm : this .handlerMappings) { HandlerExecutionChain handler = hm.getHandler(request); if (handler != null ) { return handler; } } |
HandlerAdapter接口有三个方法:
supports方法:是判断该适配器是否支持这个HandlerMethod,就是当得到一个handler时,该接口子类该方法做判断(就是类似handler instanceof Controller的判断方式),用来得到适配这个handler的适配器子类。
handle方法:用来执行控制器处理函数,获取ModelAndView 。就是根据该适配器调用规则执行handler方法。
如果正常编写调用,就需要使用多个if else判断instance of
1 2 3 4 5 6 7 |
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中,不需要修改任何其他代码。
2024-04-11
台式机电脑如何连接外接显示器2024-04-11
小新系列打印机手机配置网络的方法教程2024-04-11
Thinkpad 笔记本F1-F12快捷键分别是什么功能ThinkPad蓝牙鼠标如何配对解答步骤41U5008鼠标驱动官网地址: https://support.lenovo.com/en_US/downloads/detail.page?&LegacyDocID=MIGR-67201 第一种方式是比较传统的:使...
2024-04-11
故障现象: USB设备U盘、移动硬盘等插入后提示无法识别的设备,确认设备本身正常,设备可加电,或插入设备后加电但无任何反应,无法使用。新型号机器多表现为黄色USB接口存在此问题,...
2024-04-11