1 package com.financial.server.aop;
2
3 import java.lang.reflect.Method;
4 import java.util.Map;
5
6 import org.apache.log4j.Logger;
7 import org.aspectj.lang.ProceedingJoinPoint;
8 import org.aspectj.lang.Signature;
9 import org.aspectj.lang.reflect.MethodSignature;
10 import org.springframework.web.servlet.ModelAndView;
11
12 import com.financial.server.util.ResultBean;
13
14 public class ControllerAOP {
15
16 private static final Logger logger = Logger.getLogger(ControllerAOP.class);
17
18 public Object handlerControllerMethod(ProceedingJoinPoint pjp) {
19 long startTime = System.currentTimeMillis();
20 Object result;
21 Signature s = pjp.getSignature();
22 MethodSignature ms = (MethodSignature) s;
23 Method m = ms.getMethod();
24 try {
25 result = pjp.proceed();
26 logger.info
27
28 (pjp.getSignature() + "接口用时:" + (System.currentTimeMillis() - startTime) + "毫秒");
29 } catch (Throwable e) {
30 result = handlerException(pjp, e, m.getReturnType().getSimpleName());
31 }
32 return result;
33 }
34
35 private Object handlerException(ProceedingJoinPoint pjp, Throwable e, String returnName) {
36 e.printStackTrace();
37 if ("ModelAndView".equals(returnName)) {
38 ModelAndView mv = new ModelAndView("error");
39 return mv;
40 } else if ("ResultBean".equals(returnName)) {
41 ResultBean result = new ResultBean();
42 logger.error(pjp.getSignature() + " error ", e);
43 result.setMsg("服务器异常!请稍后重试!");
44 result.setCode(result.FAILTRUE);
45 // 异常这里可以做其他操作,如通知邮件,单独写到某个文件等等。
46 logger.info(e, e);
47 logger.error(e.getMessage(), e);
48 return result;
49 } else if ("String".equals(returnName)) {
50 return "error1";
51 } else {
52 return "error";
53 }
54
55 }
56 }