| package com.stu; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.Signature; public class Log { //定义方法开始时间和结束时间 long startTime; long afterTime; public void start() { //获取系统当前时间的毫秒数 startTime = System.currentTimeMillis(); System.out.println("前置通知before"); } // JoinPoint:连接点对象 public void after(JoinPoint jp) { System.out.println("最终通知after"); afterTime = System.currentTimeMillis(); Signature signature = jp.getSignature(); System.out.println(signature.getDeclaringTypeName()+"."+signature.getName()+"方法执行了"+(afterTime-startTime)+"ms"); } public void afterReturning() { System.out.println("后置通知afterReturning"); } public void afterThrowing(JoinPoint jp,Exception e) throws Exception { System.out.println("异常通知afterThrowing"); System.out.println("发生异常,异常的原因是" + e.getMessage()); } /** * ProceedingJoinPoint:正在执行的连接点,只能写在环绕通知中 * * @return返回值表示的连接点的返回值 */ public Object around(ProceedingJoinPoint pjp) { Object obj = null; System.out.println("环绕通知around"); try { System.out.println("环绕前置通知"); startTime = System.currentTimeMillis(); // proceed():执行连接点,返回连接点的返回值 // 获取正在执行的连接点对象所在的类,打印结果:class org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint Class<? extends ProceedingJoinPoint> class1 = pjp.getClass(); //System.out.println("class:" + class1); // 当前执行的连接点,打印结果:int com.stu.impl.StuImpl.update(int,int) Signature signature = pjp.getSignature(); //System.out.println("signature:" + signature); // 连接点的方法名,打印结果:update String name = signature.getName(); //System.out.println("name:" + name); // 连接点所在的类,打印结果:class com.stu.impl.StuImpl Class declaringType = signature.getDeclaringType(); //System.out.println("declaringType:" + declaringType); // 连接点所在的类名全路径,打印结果:com.stu.impl.StuImpl String declaringTypeName = signature.getDeclaringTypeName(); //System.out.println("declaringTypeName:" + declaringTypeName); // 调用连接点的目标对象,打印结果:com.stu.impl.StuImpl@6e4784bc Object target = pjp.getTarget(); //System.out.println("target:" + target); // 连接点传递的参数列表 Object[] args = pjp.getArgs(); System.out.println("args.length:" + args.length); for (Object o : args) {<br> System.out.println("arg:"+o);<br> } obj = pjp.proceed(); System.out.println("环绕后置通知"); } catch (Throwable e) { System.out.println("环绕异常通知"); Signature signature = pjp.getSignature(); System.out.println(signature.getDeclaringTypeName()+"."+signature.getName()+"方法时发生异常,异常的原因是" + e.getMessage()); } finally { System.out.println("环绕最终通知"); afterTime = System.currentTimeMillis(); Signature signature = pjp.getSignature(); System.out.println(signature.getDeclaringTypeName()+"."+signature.getName()+"方法执行了"+(afterTime-startTime)+"ms"); } return obj; } } |