1 package com.aspectj.demo.aspect; 2 3 import java.lang.annotation.ElementType; 4 import java.lang.annotation.Retention; 5 import java.lang.annotation.RetentionPolicy; 6 import java.lang.annotation.Target; 7 8 @Retention(RetentionPolicy.RUNTIME) 9 @Target(ElementType.METHOD) 10 public @interface MonitorMethod { 11 String value() default ""; 12 }
1 package com.aspectj.demo.aspect; 2 3 import java.lang.reflect.Method; 4 5 import org.aspectj.lang.ProceedingJoinPoint; 6 import org.aspectj.lang.annotation.Around; 7 import org.aspectj.lang.annotation.Aspect; 8 9 @Aspect 10 public class MethodExecutionTime { 11 12 // @Around("execution(* *.*(..)) && @annotation(com.aspectj.demo.aspect.MonitorMethod)") 13 @Around("execution(* *.*(..)) && @annotation(method)") 14 public Object profile(ProceedingJoinPoint pjd,MonitorMethod method) throws Throwable { 15 Object result = null; 16 System.out.println(method.value()); 17 // 这里可以获取方法名 18 System.out.println(pjd.getSignature().getName()); 19 System.out.println(pjd.getTarget()); 20 // 获取方法名 21 Method[] methods = pjd.getSignature().getDeclaringType().getMethods(); 22 System.out.println(methods[0]); 23 24 // 获取参数信息 25 Object[] args = pjd.getArgs(); 26 for (Object o : args) { 27 System.out.println(o.toString()); 28 } 29 try { 30 // System.out.println("前置通知"); 31 result = pjd.proceed(); 32 // System.out.println("后置通知"); 33 } catch (Throwable e) { 34 // System.out.println("异常通知"); 35 } 36 // System.out.println("返回通知"); 37 return result; 38 } 39 }
1 package com.aspectj.demo.aspect; 2 3 public class StockService { 4 5 @MonitorMethod(value="1111111111") 6 public String getBaseInfo(String a) { 7 try { 8 Thread.sleep(500); 9 } catch (InterruptedException e) { 10 e.printStackTrace(); 11 } 12 return ""; 13 } 14 }