链式开发,增加代码可读性,切面思想较少代码冗余,仅供参考学习。
一、实用类
链式主流程1:
import com.HandlerChain;
import com.RequestData;
import com.ResponData;
import com.Filter1ControlHandler;
import com.Filter2ControlHandler;
import com.result.Result;
public class MenthHandlerChain extends HandlerChain<Result<ResponData>, RequestData> {
@Override
protected void initHandlers() {
//过滤实现1
addHandler(new Filter1ControlHandler<>());
//过滤实现2
addHandler(new Filter2ControlHandler<>());
}
}
过滤实现2:
import com.Handler;
import com.ResponData;
import com.RequestData;
import com.ApplicationContextHolder;
import javax.annotation.Resource;
public class Filter1ControlHandler<T> extends Handler<Result<ResponData>, RequestData> {
private static final Logger logger = LoggerFactory.getLogger(Filter1ControlHandler.class);
@Resource
private RiskService riskService;//外部依赖接口
public Filter1ControlHandler() {
ApplicationContextHolder.autowire(this);
}
@Override
public Result<ResponData> invoke(RequestData context) {
try {
//利用入参context中的参数进行业务过滤
String param = context.getParam();
boolean riskStatus = riskService.risk(param);
if(!riskStatus){
return this.getNext().invoke(context);//继续透传入参到下一个过滤
}
return Result.failResult(3001, "被风控了,结束链式");
} catch (Exception e) {
logger.error("Filter1ControlHandler exception", e);
return Result.failResult(3001, "被风控了,结束链式");
}
}
}
过滤实现3:
import com.Handler;
import com.Respo