zoukankan      html  css  js  c++  java
  • 基于AspectJ自定义注解

     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 }

    有追求,才有动力!

    向每一个软件工程师致敬!

    by wujf

    mail:921252375@qq.com

  • 相关阅读:
    Swift
    Swift
    Swift
    Swift
    iOS 判断某一日期是否在一日期区间
    iOS 本地推送通知
    iOS json解析中包含“ ”等解析出错
    iOS UILabel两侧加阴影
    IOS 设置ios中DatePicker的日期为中文格式
    [分享] 关于App Store下载到一半发生错误的问题 [复制链接]
  • 原文地址:https://www.cnblogs.com/wujf/p/5363209.html
Copyright © 2011-2022 走看看