ControllerAOP.java 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package com.demo.aop;
  2. import java.util.Arrays;
  3. import org.aspectj.lang.ProceedingJoinPoint;
  4. import org.aspectj.lang.Signature;
  5. import org.aspectj.lang.reflect.MethodSignature;
  6. import org.slf4j.Logger;
  7. import org.slf4j.LoggerFactory;
  8. import com.demo.pojo.ResultBean;
  9. /**
  10. * AOP动态切入controller,并统一规范
  11. * @author yuan
  12. *
  13. */
  14. public class ControllerAOP {
  15. private static final Logger logger = LoggerFactory.getLogger(ControllerAOP.class);
  16. public Object handlerControllerMethod(ProceedingJoinPoint pjp) {
  17. long startTime = System.currentTimeMillis();
  18. logger.info("切入开始...");
  19. ResultBean<?> result;
  20. String[] parameters = null;
  21. try {
  22. Signature signature = pjp.getSignature();
  23. MethodSignature ms = (MethodSignature)signature;
  24. parameters = ms.getParameterNames();
  25. result = (ResultBean<?>) pjp.proceed();
  26. } catch (Throwable e) {
  27. result = handlerException(pjp, e);
  28. }
  29. logger.info(pjp.getSignature() + " " + Arrays.toString(parameters) + " use time:" + (System.currentTimeMillis() - startTime));
  30. logger.info("切入结束...");
  31. return result;
  32. }
  33. //组装异常数据
  34. private ResultBean<?> handlerException(ProceedingJoinPoint pjp, Throwable e) {
  35. ResultBean<?> result = new ResultBean<>();
  36. logger.error(pjp.getSignature() + " error ", e);
  37. result.setMsg(e.toString());
  38. result.setCode(ResultBean.FAIL);
  39. return result;
  40. }
  41. }