public abstract class VerifyHandler {
private VerifyHandler nextHandler;
public void verify(RequestDTO request) {
doVerify(request);
if (getNextHandler() != null) {
getNextHandler().verify(request);
}
}
public VerifyHandler getNextHandler() {
return nextHandler;
}
public void setNextHandler(VerifyHandler nextHandler) {
this.nextHandler = nextHandler;
}
public abstract void doVerify(RequestDTO request);
@Component
public class VerifyChainProcessor {
@Autowired
private final List<VerifyHandler> verifyHandlerList;
private VerifyHandler verifyHandler;
public VerifyChainProcessor() {
verifyHandlerList = new ArrayList<>();
}
@PostConstruct
public void initializeChainFilter() {
for (int i = 0; i < verifyHandlerList.size(); i++) {
if (i == 0) {
verifyHandler = verifyHandlerList.get(0);
} else {
VerifyHandler currentHandler = verifyHandlerList.get(i - 1);
VerifyHandler nextHandler = verifyHandlerList.get(i);
currentHandler.setNextHandler(nextHandler);
}
}
}
public void startVerify(RequestDTO request) {
Objects.requireNonNull(verifyHandler).verify(request);
}
}
@Slf4j
@Component
@Order(1)
public class Verify1Handler extends VerifyHandler {
@Override
public void doVerify(RequestDTO request) {
}
}
@Slf4j
@Component
@Order(2)
public class Verify2Handler extends VerifyHandler {
@Override
public void doVerify(RequestDTO request) {
}
}