做业务系统时,最好将每个步骤的代码封装在拦截器类中,这样可以减少重复代码
public interface Intercepter { public void intercept(IntercepterChain intercepterChain) throws Exception; }
public interface IntercepterChain { public void proceed() throws Exception; }
public interface JieSuanYeService { public JiesuanYueGetChannelsUsableResponse getJieSuanYePayChannelsUsable(); }
@Service("jieSuanYeService") public class JieSuanYeServiceImpl implements JieSuanYeService { Logger logger = LoggerFactory.getLogger(JieSuanYeServiceImpl.class); @Resource private List<Intercepter> jieSuanYeIntercepters; @Override @Profiled(tag = "service.getJieSuanYePayChannelsUsable") public JiesuanYueGetChannelsUsableResponse getJieSuanYePayChannelsUsable(){ try{ new IntercepterChainImpl(jieSuanYeIntercepters.iterator()).proceed(); }catch (Exception e){ logger.error("处理链路发生异常", e); ThreadLocalHolder.getJiesuanYueGetChannelsUsableResponse().getResult().setInfo(e.toString()); ThreadLocalHolder.getJiesuanYueGetChannelsUsableResponse().getResult().setSuccess(false); } return ThreadLocalHolder.getJiesuanYueGetChannelsUsableResponse(); }}
/** * Created by liyiwen1 on 2016/7/1. */ public class IntercepterChainImpl implements IntercepterChain { private Iterator<Intercepter> iterator; @Override public void proceed() throws Exception{ if (iterator.hasNext()){ iterator.next().intercept(this); } } public IntercepterChainImpl(Iterator<Intercepter> iterator){ this.iterator = iterator; } public Iterator<Intercepter> getIterator() { return iterator; } public void setIterator(Iterator<Intercepter> iterator) { this.iterator = iterator; } }