使用springMVC AOP实现日记记录

来源:互联网 发布:高洛峰php 编辑:程序博客网 时间:2024/06/10 22:16

1 . 配置springmvc驱动,以及包扫描,还有AOP配置,如下:

<context:component-scan base-package="org.lee" /> <mvc:annotation-driven /><!-- 注解实现日记记录 -->    <aop:aspectj-autoproxy />  


2 . 引入相关jar包


3 . 目录树


4 . 编写日记记录类 LogInterceptor.java
package org.lee.Interceptor;import java.lang.reflect.Method;import java.util.Arrays;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.aspectj.lang.reflect.MethodSignature;import org.springframework.stereotype.Component;@Component@Aspectpublic class LogInterceptor {   /**    * 这里针对org.lee.service.Imp目录下的新增,修改方法进行记录    * */ @Pointcut("execution(* org.lee.service.Imp.*.*create*(..)) || execution(* org.lee.service.Imp.*.*edit*(..))")public void allMethod(){} @Before("allMethod()")  public void before(){      }@After("allMethod()")public void afterLog(JoinPoint point){System.out.println("--------------afterLog:--------------最终通知");System.out.println("--------------afterLog:=========目标方法为:"+point.getSignature().getDeclaringTypeName()+"."+point.getSignature().getName());System.out.println("--------------afterLog:--------------参数为:"+Arrays.toString(point.getArgs()));System.out.println("--------------afterLog:--------------被织入的对象为:"+point.getTarget());}@AfterReturning(value="allMethod()",returning="returnValue")public void afterRunningLog(JoinPoint point,Object returnValue ){System.out.println("--------------afterRunningLog--------------返回值后通知");System.out.println("--------------afterRunningLog----------------目标方法:"+point.getSignature().getDeclaringTypeName()+"."+point.getSignature().getName());System.out.println("--------------afterRunningLog----------------参数为:"+Arrays.toString(point.getArgs()));System.out.println("--------------afterRunningLog----------------返回值:"+returnValue); }@AfterThrowing(value="allMethod()",throwing="ex")public void AfterThrowingLog(Throwable ex){System.out.println("--------------AfterThrowingLog--------------进入异常通知");System.out.println("--------------AfterThrowingLog--------------异常信息:"+ex.getMessage());}@Around("allMethod()")public Object doAround(ProceedingJoinPoint p) throws Throwable{System.out.println("--------------Around--------------进入环绕通知");  long startTime = System.currentTimeMillis();  Object obj = p.proceed();  long endTime = System.currentTimeMillis();    MethodSignature signature = (MethodSignature) p.getSignature();          String methodName = signature.getDeclaringTypeName() + "." + signature.getName();           System.out.println("目标方法:"+methodName);  System.out.println("运行耗时:"+(endTime-startTime)+"ms");System.out.println("--------------Around--------------结束方法调用");return obj;}}


测试:


0 0
原创粉丝点击