基于spring的前置后置及环绕通知
2016-11-11 00:00
423 查看
因为项目需要去监控方法的执行时间,从大神处晓得通过环绕通知可以实现这个功能,所以自己研究了下,,找了点网上的例子,模仿出来了一个,代码如下
前置方法与后置方法没有去进行操作,,环绕方法进行的是在执行前获取一个时间,然后去执行业务逻辑,完成后再去获取当前时间然后做减法获得程序的执行时间,并且用log打印出来
xml配置如下
xml配置:先定义通知方法,然后定义切面及切点,,然后在里面再去定义切面的通知方法,我这里主要是需要获取controller层方法执行所需要的时间
程序执行结果如下
package com.mm.service.util; import java.util.Date; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Aspect; @Aspect public class OperateLogger { private static Log logger = LogFactory.getLog("operateLogger"); /** * 前置通知 * @param thisJoinPoint */ public void beforeExecute(JoinPoint thisJoinPoint){ } /** * 环绕通知类 * @param thisJoinPoint * @return * @throws Throwable */ public Object userOperate(ProceedingJoinPoint thisJoinPoint) throws Throwable { long befoerTime = new Date().getTime(); Object obj = thisJoinPoint.proceed();// 此句执行业务逻辑方法 long endTime = new Date().getTime(); // 目标组件的类名 String className = thisJoinPoint.getTarget().getClass().getName(); // 调用的方法名 String method = thisJoinPoint.getSignature().getName(); logger.info("方法:"+ className + "/" + method + "执行了 " + CommonUtil.getRunTime(befoerTime, endTime)); return obj;// 返回值 可不返回obj(业务逻辑的返回值) } /** * 后置通知类 * @param thisJoinPoint */ public void afterExecute(JoinPoint thisJoinPoint){ } }
前置方法与后置方法没有去进行操作,,环绕方法进行的是在执行前获取一个时间,然后去执行业务逻辑,完成后再去获取当前时间然后做减法获得程序的执行时间,并且用log打印出来
xml配置如下
<bean id="operateLogger" class="com.mm.service.util.OperateLogger"></bean> <aop:config> <!-- 定义切面 --> <aop:aspect id="aopAspect" ref="operateLogger"> <!-- 定义切点 --> <aop:pointcut id="pointcut" expression="execution(* com.wonders.hs.pd.mm.service.contoller.*.*(..))"/> <!-- <aop:around method="userOperate" pointcut="within(com.mm.service.contoller..*)"/> --> <!-- 定义通知 --> <aop:before pointcut-ref="pointcut" method="beforeExecute"/> <aop:around pointcut-ref="pointcut" method="userOperate"/> <aop:after pointcut-ref="pointcut" method="afterExecute"/> </aop:aspect> </aop:config>
xml配置:先定义通知方法,然后定义切面及切点,,然后在里面再去定义切面的通知方法,我这里主要是需要获取controller层方法执行所需要的时间
程序执行结果如下
2016-11-11 13:45:25,440 INFO [sqlLogs] - 方法:com.mm.service.contoller.GoodsManagerContoller/GetGoodsToDataSetForWeb执行了 708 毫秒
相关文章推荐
- Spring 基于注解,实现 前置通知、后置通知、返回通知、 异常通知 、后置通知
- Spring3.0中的前置通知、后置通知、环绕通知、异常通知
- spring_AOP前置通知&后置通知&返回通知&环绕通知
- Spring AOP 面向切面编程 常见通知实现(前置,后置,环绕,异常)
- [原创]java WEB学习笔记106:Spring学习---AOP的通知 :前置通知,后置通知,返回通知,异常通知,环绕通知
- springaop术语概述及aop中常见通知的实现(前置,后置,环绕,异常)
- Spring_17-19前置通知&后置通知&返回通知&异常通知&环绕通知
- spring 切面 前置后置通知 环绕通知demo
- 在idea创建spring项目,基于Aspectj的aop操作,执行前置和后置通知出现错误
- Spring通知(前置通知,后置通知,返回通知,异常通知,环绕通知)
- Aop的日志操作(前置,后置,环绕,返回,异常通知)
- Spring 通过AOP 来实现前置,环绕,异常通知,注解
- Spring初学之annotation实现AOP前置通知、后置通知、返回通知、异常通知。
- Spring AOP中的前置通知和后置通知详解
- Spring AOP前置通知和后置通知
- Spring在使用后置通知与环绕通知时遇到的问题
- Spring3.0中的前置通知、后置通知、环绕通知、异常通知
- 使用Spring 2.0新特性实现前置通知--基于Schema方式
- Spring 通过来AOP 实现前置,环绕,异常通知,注解
- 使用Spring 2.0新特性实现前置通知--基于Annotation方式