spring AOP @AfterThrowing没有返回值的原因
2015-12-15 16:08
447 查看
import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.log4j.Logger; import org.apache.shiro.web.servlet.ShiroHttpServletRequest; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component; /** * 类说明:系统服务组件Aspect切面Bean * * @author 作者 LzwGlory * @version 创建时间:2015年12月14日 下午5:36:13 */ @Component @Aspect public class ServiceAspect { private static final Logger log = Logger.getLogger(ServiceAspect.class); // 配置切入点,该方法无方法体,主要为方便同类中其他方法使用此处配置的切入点 @Pointcut("execution(* com.ultrapower.rw.web.ows.controller.app..*(..))") public void aspect() { } /* * 配置前置通知,使用在方法aspect()上注册的切入点 同时接受JoinPoint切入点对象,可以没有该参数 */ @Before("aspect()") public void before(JoinPoint joinPoint) { Object[] args = joinPoint.getArgs();// 获得目标方法的参数 String name = joinPoint.getSignature().getName();// 获得目标方法名 log.info("<=============" + name + "方法--AOP 前置通知=============>"); if (args != null && args.length > 0 && args[0].getClass() == ShiroHttpServletRequest.class) { HttpServletRequest request = (HttpServletRequest) joinPoint .getArgs()[0]; String requestURI = request.getRequestURI(); @SuppressWarnings("unchecked") Map<String, String> parameterMap = request.getParameterMap(); StringBuilder paramStr = new StringBuilder(); for (Map.Entry<String, String> param : parameterMap.entrySet()) { paramStr.append(param.getKey()).append("=") .append(param.getValue()); } if (paramStr.length() > 0) { requestURI = requestURI + "?" + paramStr.toString(); } log.info(name + " 方法请求路径与参数:" + requestURI); } } // 配置后置通知,使用在方法aspect()上注册的切入点 @After("aspect()") public void after(JoinPoint joinPoint) { if (log.isInfoEnabled()) { String name = joinPoint.getSignature().getName();// 获得目标方法名 log.info("<=============" + name + "方法--AOP 后置通知=============>"); } } // 配置环绕通知,使用在方法aspect()上注册的切入点 @Around("aspect()") public Object around(ProceedingJoinPoint joinPoint) { String name = joinPoint.getSignature().getName();// 获得目标方法名 log.info("<=============" + name + "方法--AOP 环绕通知=============>"); long start = System.currentTimeMillis(); Object result = null; try { result = joinPoint.proceed(); long end = System.currentTimeMillis(); if (log.isInfoEnabled()) { log.info("around " + joinPoint + "\tUse time : " + (end - start) + " ms!"); } } catch (Throwable e) { long end = System.currentTimeMillis(); if (log.isInfoEnabled()) { log.info("around " + joinPoint + "\tUse time : " + (end - start) + " ms with exception : " + e.getMessage()); } } return result; } // 配置后置返回通知,使用在方法aspect()上注册的切入点 @AfterReturning(pointcut = "aspect()", returning = "result") public void afterReturn(JoinPoint joinPoint, Object result) { String name = joinPoint.getSignature().getName();// 获得目标方法名 log.info("<=============" + name + "方法--AOP 后置返回通知=============>"); log.info(name + "方法返回参数:" + result); } // 配置抛出异常后通知,使用在方法aspect()上注册的切入点 @AfterThrowing(pointcut = "aspect()", throwing = "ex") public void afterThrow(JoinPoint joinPoint, Exception ex) { String name = joinPoint.getSignature().getName();// 获得目标方法名 log.info("<=============" + name + "方法--AOP 异常后通知=============>"); log.info(name + "方法抛出异常为:" + "\t" + ex.getMessage()); } }
由于@Around没有返回值
相关文章推荐
- 关于myeclipse+maven(svn)的原本正确项目报红叉问题
- java中的@retention and @interface
- MyBatis学习七:spring和MyBatis整合、逆向工程
- Spring jdbcTemplat插入,查询
- java.lang.IllegalStateException: getOutputStream() has already been called for this response解决方案
- Java创建多线程的几种方法
- spring配置文件详解--真的蛮详细
- java关键字
- Java静态内部类的实例化问题
- java 接口和抽象
- Jdk1.8的安装
- Java国际化和Spring国际化比较
- 初识struts
- 使用Java匿名类直接实例化接口
- MyEclipse has detected that less than 5% of the 22MB of PS Survivor Space (Heap memory) space remain
- java之JDBC相关整理
- Struts2-Interceptor的逻辑意义
- java 正则表达式 匹配问题
- RxJava使用场景小结
- 你应该将应用迁移到Spring 4的五个原因