在Spring源码中,责任链模式被广泛应用于多个场景,如过滤器链、AOP切面链和配置解析链等。在Spring MVC中,过滤器链是一个典型的责任链模式应用。每个过滤器都可以对请求或响应进行操作,并决定是否继续调用链中的下一个过滤器。以下是过滤器链的简略源码:
public interface Filter {
boolean filter(Task task);
}
@Component
public class DurationFilter implements Filter {
@Override
public boolean filter(Task task) {
System.out.println("时效性检验");
return true; // 继续调用下一个过滤器
}
}
@Component
public class RiskFilter implements Filter {
@Override
public boolean filter(Task task) {
System.out.println("风控拦截");
return true; // 继续调用下一个过滤器
}
}
@Service
public class ApplicationService {
@Autowired
private List<Filter> filters;
public void mockedClient() {
Task task = new Task();
for (Filter filter : filters) {
if (!filter.filter(task)) {
return; // 终止过滤链
}
}
// 执行任务逻辑
}
}
在这个例子中,Filter接口定义了过滤器的行为,每个具体的过滤器类(如DurationFilter和RiskFilter)实现了这个接口。在ApplicationService中,通过遍历filters列表来依次调用每个过滤器的filter方法,从而实现责任链模式。