springBoot责任链模式完成数据校验
使用好处
基于责任链模式改造复杂业务流程将多步骤逻辑按职责拆分为链式调避免大量 if/else 嵌套,逻辑更清晰,维护更加方便
用户实体
@Data
public class User {
private String id;
private String name;
private String password;
}
handler类
public interface Handler {
int sort();
void exec(User user);
}
名称处理实现类
@Component
public class NameHandler implements Handler{
@Override
public int sort() {
return 0;
}
@Override
public void exec(User user) {
if (user.getName() == null){
System.out.println("用户名是空");
//如果想连续校验不结束,可以return,在最后一个抛异常
throw new RuntimeException("用户名是空");
}
}
}
密码处理实现类
@Component
public class PassWordHandler implements Handler{
@Override
public int sort() {
return 1;
}
@Override
public void exec(User user) {
if (user.getPassword() == null || !Objects.equals(user.getPassword(),"666")){
System.out.println("密码不正确");
//如果想连续校验不结束,可以return,在最后一个抛异常
//return;
throw new RuntimeException("密码不正确");
}
}
}
处理器管理上下文
@Component
public class UserHandlerContext implements ApplicationContextAware {
private List handlerList = new LinkedList<>();
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
Map beansOfType = applicationContext.getBeansOfType(Handler.class);
handlerList = beansOfType.values().stream().sorted(Comparator.comparing(Handler::sort)).collect(Collectors.toList());
}
public void handle(User user) {
for (Handler handler : handlerList) {
handler.exec(user);
}
}
}
测试:
private final UserHandlerContext userHandlerContext;
@GetMapping("/test")
public void test() {
userHandlerContext.handle(new User());
}

浙公网安备 33010602011771号