责任链模式(Chain of Responsibility)是一种行为计划模式,它答应多个对象处理一个请求,大概将这些对象连成一条链。在责任链模式中,请求从链的一端开始,依次经过每个处理者对象,直到有对象处理它为止。每个处理者都有机会处理请求,也有机会将请求传递给链上的下一个处理者。
1.2 优点与缺点
事件处理:
Java的AWT(Abstract Window Toolkit)和Swing事件模子利用了责任链模式。当一个事件发生时,它会沿着组件的层级布局传递,直到被某个事件监听器处理。 动态署理:
在动态署理中,调用处理器(InvocationHandler)可以形成一个责任链,用于拦截和处理对署理实例的调用。 Servlet 过滤器(Filter):
Java Servlet API答应你界说过滤器,这些过滤器可以形成一个链,用于处理HTTP请求和响应。每个过滤器都有机会修改请求或响应,大概将处理传递给链中的下一个过滤器。 JAX-RS 资源方法处理:
在JAX-RS(Java API for RESTful Web Services)中,可以界说多个拦截器和非常映射器,它们可以形成一个责任链,用于处理RESTful请求。 Java EE 拦截器:
在Java EE中,拦截器可以界说为一个责任链,用于在调用企业Bean的方法之前或之后实行某些操纵。 Java 安全管理器:
在Java的安全管理器中,可以利用责任链模式来处理安全检查。每个安全检查请求可以沿着安全管理器链传递,直到找到能够处理该请求的管理器。 日志记录:
一些日志框架(如Log4j或SLF4J)答应你界说多个日志处理器,这些处理器可以形成一个责任链,用于决定怎样记录差别级别的日志信息。 JDBC 驱动管理:
Java的JDBC(Java Database Connectivity)驱动管理器利用责任链模式来查找和加载符合的JDBC驱动。 命令模式的实现:
在命令模式中,可以利用责任链模式来处理撤销和重做操纵,每个命令可以有本身的撤销和重做链。 非常处理:
在Java中,非常处理机制也可以看作是一种责任链模式。当非常被抛出时,它会在调用栈中向上传递,直到找到符合的非常处理块。
4. Spring 哪些地方用到了责任链模式
Spring Web MVC 拦截器(HandlerInterceptor):
Spring MVC提供了一个拦截器机制,答应你在请求处理之前和之后实行特定的操纵。拦截器可以形成一个链,每个拦截器都有机会在请求到达控制器之前或之后进行处理。 Spring AOP 切面:
Spring的AOP(面向切面编程)机制答应你界说切面,这些切面可以拦截对目的对象的方法调用。切面可以形成一个责任链,用于在方法实行前后实行横切关注点(如日志记录、安全检查等)。 Spring Security 过滤器链:
Spring Security利用过滤器链来处理安全相干的请求。每个过滤器都有机会处理请求,大概将请求传递给链中的下一个过滤器。 事件多播器(ApplicationEventMulticaster):
Spring的事件发布机制答应你界说多个事件监听器。当事件被发布时,事件多播器会将事件传递给所有的监听器,这可以看作是一种责任链模式。 Spring 事务管理:
Spring的事务管理器可以看作是一个责任链,它负责在方法实行前后处理事务的开启、回滚和提交。 Spring 非常处理:
Spring提供了非常处理机制,答应你界说多个非常处理器。当非常发生时,非常处理器链会尝试处理非常,直到找到符合的处理器。 Spring Boot 自动设置:
Spring Boot的自动设置机制答应你界说多个设置类,这些设置类可以形成一个责任链,用于条件性地应用设置。 Spring Cloud Gateway 过滤器:
Spring Cloud Gateway是一个基于Spring Framework 5、Project Reactor和Spring Boot 2的微服务网关,它提供了过滤器机制,这些过滤器可以形成一个责任链,用于处理请求和响应。