目录

SpringMvc的设计模式

SpringMvc的设计模式

1. 前端控制器模式(Front Controller Pattern)

应用场景:

Spring MVC 的 DispatcherServlet 是该模式的核心实现,作为统一请求入口,负责接收所有 HTTP 请求并协调后续处理流程。它通过集中控制请求分发、视图解析和异常处理,简化了 Web 层的复杂性。

具体体现:

流程控制:DispatcherServlet 根据请求 URL 调用 HandlerMapping 定位处理器,再通过 HandlerAdapter 执行具体业务逻辑,最后通过 ViewResolver 渲染视图。

2. 适配器模式(Adapter Pattern)

应用场景:

用于统一不同处理器的调用方式,例如将基于注解的 @Controller 类、传统 Servlet 或其他框架(如 Struts)的处理器适配到 Spring MVC 的流程中。

具体体现:

HandlerAdapter:

不同处理器(如 Controller 接口、HttpRequestHandler)通过对应的适配器(如 RequestMappingHandlerAdapter)转换为统一的处理接口,使框架能够灵活支持多种处理器类型。

3. 模板方法模式(Template Method Pattern)

应用场景:

定义处理流程的骨架,允许子类在不改变整体结构的情况下重写特定步骤。

具体体现:

FrameworkServlet:

DispatcherServlet 继承自 FrameworkServlet,其 processRequest() 方法定义了请求处理的整体流程(如初始化上下文、调用 doService()),而子类只需实现 doService() 完成具体逻辑。

4. 策略模式(Strategy Pattern)

应用场景:

动态选择算法或策略以满足不同需求,例如视图解析、处理器映射等。

具体体现:

HandlerMapping:

支持多种策略(如基于注解的 RequestMappingHandlerMapping、基于 XML 配置的 BeanNameUrlHandlerMapping),根据配置动态选择最佳实现。

ViewResolver:

支持多种视图技术(如 JSP、Thymeleaf、JSON),通过不同解析策略生成最终响应。

5. 组合模式(Composite Pattern)

应用场景:

将多个对象组合成树形结构以表示“整体-部分”关系,常用于拦截器链的处理。

具体体现:

HandlerExecutionChain:

包含一个处理器(Handler)和多个拦截器(Interceptor),通过链式调用实现请求的前置处理、后置处理和最终响应。

6. 观察者模式(Observer Pattern)

应用场景:

处理事件驱动的逻辑,如请求生命周期中的事件通知。

具体体现:

ApplicationContext 事件机制:

Spring MVC 通过 ApplicationEvent 和 ApplicationListener 实现事件发布与监听,例如请求处理完成时发布事件以触发日志记录或资源清理。

7. 工厂模式(Factory Pattern)

应用场景:

对象的创建与管理解耦,例如 Bean 的实例化。

具体体现:

BeanFactory 与 ApplicationContext:

通过工厂模式管理控制器、服务层等 Bean 的生命周期,依赖注入(DI)进一步解耦组件间依赖。

8. 单例模式(Singleton Pattern)

应用场景:

确保核心组件(如 DispatcherServlet、HandlerMapping)全局唯一,减少资源消耗。

具体体现:

Bean 的单例作用域:

Spring 默认以单例模式管理 Bean,例如控制器、适配器等核心组件仅实例化一次。