AOP+自定义注解 实现service统一的异常信息处理
生活随笔
收集整理的這篇文章主要介紹了
AOP+自定义注解 实现service统一的异常信息处理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
返回信息枚舉 TipsMsg:
public enum TipsMsg {DEFAULT_SUCCESS("0","操作成功"),DEFAULT_FAILED("1","操作失敗"),//其他枚舉//get//set}自定義注解 ReturnMsg (也是切點) :
@Target(ElementType.METHOD)//方法上聲明 @Retention(RetentionPolicy.RUNTIME)//注解將被編譯器記錄在class文件中,而且在運行時會被虛擬機保留,因此它們能通過反射被讀取到 public @interface ReturnMsg {TipsMsg successMsg() default TipsMsg.DEFAULT_SUCCESS;TipsMsg failedMsg() default TipsMsg.DEFAULT_FAILED; }AOP切面:
@Aspect//聲明切面 @Component public class ReturnMsgAspect {private Logger logger = LoggerFactory.getLogger(ReturnMsgAspect.class);@Pointcut("@annotation(xx.xxx.xx.xx.xx.xx.xx.ReturnMsg)")//切點為注解全路徑public void ReturnMsgPointcut(){}@Around(value = "ReturnMsgPointcut()")public Object serviceAround(ProceedingJoinPoint joinPoint) throws Throwable {//返回值統一MethodSignature signature = (MethodSignature) joinPoint.getSignature();//獲取返回值類型Class returnType = signature.getReturnType();//獲取注解ReturnMsg returnMsg = signature.getMethod().getAnnotation(ReturnMsg.class);String msg = returnMsg.successMsg().getTipsMsg();String code = returnMsg.successMsg().getCode();Object returnObj = null;try {returnObj = joinPoint.proceed();} catch (Exception e) {e.printStackTrace();throw new ZTBusinessException(BaseRspConstants.RSP_CODE_FAILD, returnMsg.failedMsg().getTipsMsg());}RspBaseBO rspBaseBO = BizEntityApis.buildRspBaseBO(code, msg);if(returnObj instanceof RspBaseBO){//調用成功時,有返回值且為RspBaseBO子類((RspBaseBO) returnObj).setMessage(msg);//默認成功返回值set進去returnObj = returnType.cast(returnObj);}return returnObj;} }使用
@ReturnMsg(successMsg = TipsMsg.DEFAULT_SUCCESS,failedMsg = TipsMsg.DEFAULT_FAILED)public RspBaseBO serviceA (Input in) {//業務方法,joinPoint.proceed()所調用的方法 }execution表表達式也可作為切點,mark下
總結
以上是生活随笔為你收集整理的AOP+自定义注解 实现service统一的异常信息处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端_网页编程 Ajax加强
- 下一篇: 使用hbuilder的maps模块调起百