在Spring MVC框架中,适配器模式主要体现在对不同类型的处理器(即Controller)的统一处理上。Spring MVC通过适配器模式来保证无论Controller的实现方式如何多样化,都能够被DispatcherServlet统一调用和管理。具体使用方式如下:
-
核心组件:
- DispatcherServlet:作为前端控制器,它是整个Spring MVC体系中的入口点,负责接收和分发用户的HTTP请求。
- HandlerMapping:处理器映射器,用于根据请求信息找到对应的处理器(Controller)。
- HandlerAdapter:处理器适配器,它的关键作用是充当DispatcherServlet与各种Controller之间的适配桥梁,确保即使Controller有不同的实现方式,也能够通过适配器来执行对应的操作。
-
适配器模式的具体应用:
- Spring MVC内置了多种HandlerAdapter实现,如
RequestMappingHandlerAdapter
、SimpleControllerHandlerAdapter
等,每种适配器分别针对不同类型的Controller进行适配。 - 当DispatcherServlet通过HandlerMapping找到一个Controller后,它并不会直接调用Controller的方法,而是通过查找对应的HandlerAdapter来执行请求处理方法。
- 不同的Controller(可能是基于注解的、实现了特定接口的或是继承自特定类的Controller)都有相应的适配器来支持,适配器通过调用Controller的实际处理方法,并将结果包装成ModelAndView对象返回给DispatcherServlet。
- Spring MVC内置了多种HandlerAdapter实现,如
-
执行流程:
- 用户发起HTTP请求 -> DispatcherServlet接收到请求 ->
- 调用HandlerMapping寻找合适的Controller ->
- HandlerMapping返回找到的Controller及其对应的HandlerAdapter->
- DispatcherServlet调用选定的HandlerAdapter的
handle()
方法 -> - HandlerAdapter调用Controller的处理方法 ->
- Controller执行业务逻辑并返回处理结果 ->
- HandlerAdapter将处理结果封装为ModelAndView对象 ->
- DispatcherServlet进一步处理视图渲染并返回响应给客户端。
通过适配器模式,Spring MVC框架能够很好地支持控制器的不同实现方式,并保持框架本身的稳定性和扩展性,符合开闭原则,即在不修改原有代码的基础上,能够添加新的Controller类型和相应的适配器来支持新的功能。
Spring MVC中的RequestMappingHandlerAdapter
是默认用来处理大多数注解驱动的Controller方法的适配器,包括但不限于@GetMapping
、@PostMapping
、@PutMapping
、@DeleteMapping
等注解。RequestMappingHandlerAdapter
会根据HTTP请求的方法类型来判断应该调用哪个Controller方法进行处理。在最新的Spring Boot及Spring Framework版本中,RequestMappingHandlerAdapter
是处理大部分注解驱动控制器的核心适配器。