定义一个简易版的处理对象
@Data
@AllArgsConstructor
public class BaseContext {
private String seqId;
}
定义一个数据处理接口
public interface HandleIntercept {
BaseContext handle(BaseContext context);
default boolean isMatch(BaseContext context) {
return Boolean.TRUE;
}
}
数据处理具体实现
处理一
@Component
public class HandleFirst implements HandleIntercept {
@Override
public BaseContext handle(BaseContext context) {
System.out.println("HandleFirst Handler:" + context.getSeqId());
return context;
}
}
处理二
@Component
public class HandleSecond implements HandleIntercept {
@Override
public BaseContext handle(BaseContext context) {
System.out.println("HandleSecond Handler:" + context.getSeqId());
return context;
}
}
处理三
@Component
public class HandleThird implements HandleIntercept {
@Override
public BaseContext handle(BaseContext context) {
System.out.println("HandleThird Handler:" + context.getSeqId());
return context;
}
}
实现责任链管理器,用于管理这些实现类。
@Component
public class HandleChainService {
private List<HandleIntercept> handleList = new ArrayList<>();
@Resource
private HandleFirst handleFirst;
@Resource
private HandleSecond handleSecond;
@Resource
private HandleThird handleThird;
@PostConstruct
public void init(){
handleList.add(handleFirst);
handleList.add(handleSecond);
handleList.add(handleThird);
}
public void execute(BaseContext context){
for (HandleIntercept handleIntercept : handleList) {
if (handleIntercept.isMatch(context)) {
handleIntercept.handle(context);
}
}
}
}
编写测试类
@Resource
private HandleChainService handleChainService;
@Test
public void testHandleChain() {
BaseContext context = new BaseContext("1");
handleChainService.execute(context);
}
执行结果
HandleFirst Handler:1
HandleSecond Handler:1
HandleThird Handler:1