最近給公司寫了一套第三方接口調用的框架,爲了規範並幫助業務穩定的容許,特寫了這個框架。java
###框架結構 Invoker.invoking 門面 -BizService 業務接口 -BizAOPService 業務切面 +invoking 業務接口調用 BizService.check 參數檢查 BizService.pre 業務前置調用 BizAOPService.pre 業務切面前置調用 BizService.execute 業務調用 BizAOPService.after 業務切面後置調用 BizService.after 業務後只調用 BizService.handlerException 異常處理
框架結構實際很簡單,只是將相同的東西模板化,不明確的東西抽象化,不能主導的東西橋接出去。數組
參數適配器框架
import java.io.Serializable; public interface RequestAdaptor<T> extends Serializable { /** * 參數適配 */ PayRequest<T> adapt(); /** * 參數檢查 */ void check(); }
實際這裏我徹底能夠將 BizAOPService 放入一個集合造成相似攔截器同樣的存在,這裏看具體的需求了。ide
public interface Invoker<M,N> { void invoking(BizService<M,N> bizService, BizAOPService<M,N> bizAOPService, M m, N n) throws Exception ; }
public interface BizService<M,N> { /**參數校驗*/ void check(M request, N response); /**調用前處理 如內置參數組裝,更新業務狀態*/ void pre(M request, N response); /**接口調用*/ void execute(M request, N response); /**調用後處理 更新業務狀態*/ void after(M request, N response); /**參數校驗異常處理 */ void checkException(M request, N response, Exception e) throws Exception ; /**調用前異常處理*/ void preException(M request, N response, Exception e) throws Exception ; /**調用異常處理*/ void executeException(M request, N response, Exception e) throws Exception ; /**調用後異常處理*/ void afterException(M request, N response, Exception e) throws Exception ; }
import org.slf4j.Logger; import org.slf4j.LoggerFactory; public abstract class AbstractBizService<M,N> implements BizService<M,N>{ private static final Logger LOGGER = LoggerFactory.getLogger(AbstractBizService.class); @Override public void check(M request, N response) { LOGGER.info("接口調用參數檢查:{},{}", request, response); } @Override public void pre(M request, N response) { LOGGER.info("調用前處理:{},{}", request, response); } @Override public void after(M request, N response) { LOGGER.info("調用後處理:{},{}", request, response); } @Override public void checkException(M request, N response, Exception e) throws Exception { LOGGER.info("接口調用參數檢查異常處理:{},{}", request, response, e); throw e; } @Override public void preException(M request, N response, Exception e) throws Exception { LOGGER.info("調用前異常處理:{},{}", request, response, e); throw e; } @Override public void executeException(M request, N response, Exception e) throws Exception { LOGGER.info("接口調用異常處理:{},{}", request, response, e); throw e; } @Override public void afterException(M request, N response, Exception e) throws Exception { LOGGER.info("調用後異常處理:{},{}", request, response, e); throw e; } }
public interface BizAOPService<M,N> { void pre(M request, N response); void after(M request, N response); String getBizNo(M request); }