package com.moral.common.aop; import java.util.HashMap; import java.util.Map; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component; import com.moral.common.exception.BusinessException; import lombok.extern.log4j.Log4j; @Log4j @Aspect @Component public class ControllerAOP { @Around("execution(* com.moral.controller.*Controller.*(..))") public Object handlerControllerMethod(ProceedingJoinPoint pjp) { long startTime = System.currentTimeMillis(); Map result; try { result = (Map) pjp.proceed(); log.info(pjp.getSignature() + "use time:" + (System.currentTimeMillis() - startTime)); } catch (Throwable e) { result = handlerException(pjp, e); } return result; } private Map handlerException(ProceedingJoinPoint pjp, Throwable e) { Map result = new HashMap(); // 已知异常 if (e instanceof BusinessException) { result.put("msg", e.getLocalizedMessage()); } else { log.error(pjp.getSignature() + " error ", e); result.put("msg", e.toString()); //TODO 未知的异常,应该格外注意,可以发送邮件通知等 } return result; } }