springboot实现对注解的切面案例

 更新时间:2022年01月10日 08:47:14   作者:cafe_sj_babe  
这篇文章主要介绍了springboot实现对注解的切面过程,首先定义一个注解、再编写对注解的切面只是记录的执行时间和打印方法,可以实现其他逻辑,需要的朋友可以参考一下

对注解实现切面案例:

(1)定义一个注解

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
    String getValues() default "test annotation";
}
@Target(ElementType.METHOD)

表示该注解作用在方法上(type表示类上,field表示成员变量上)

@Retention(RetentionPolicy.RUNTIME)

表示该注解的作用范围,由于需要在运行时能够识别到该注解,所以是RUNTIME(SOURCE表示源码层面上,即编译成.class时看不见该注解,而CLASS可以,但是在运行时看不到)

(2)编写对注解的切面

(只是记录的执行时间和打印方法,可以实现其他逻辑)

@Aspect
@Component
@Slf4j
public class MyAspect {
    // value也可以写成value = "(execution(* com.sj..*(..))) && @annotation(zkDistributeLock)"
    @Around(value = "@annotation(myAnnotation)", argNames = "proceedingJoinPoint, myAnnotation")
    public Object processTest(ProceedingJoinPoint proceedingJoinPoint, MyAnnotation myAnnotation) throws Throwable {
        long beginTime = System.currentTimeMillis();
        // 获取方法参数
        Object[] args = proceedingJoinPoint.getArgs();
        // 执行方法
        Object res = proceedingJoinPoint.proceed(args);
        long time = System.currentTimeMillis() - beginTime;
        MethodSignature signature = (MethodSignature) proceedingJoinPoint.getSignature();
        String className = proceedingJoinPoint.getTarget().getClass().getName();
        String methodName = signature.getName();
        log.info("注解上的值:{}", myAnnotation.getValues());
        log.info("执行时间:{}", time);
        log.info("执行类和方法:{} {}", className, methodName);
        return res;
    }
}

(3)测试

@GetMapping("/go")
@MyAnnotation(getValues = "success")
public String test1() {
    return "hello world";
}

执行结果:

注解上的值:success

执行时间:8

执行类和方法:com.***.TestController test1

到此这篇关于springboot实现对注解的切面案例的文章就介绍到这了,更多相关springboot实现对注解的切面内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java面向对象基础知识之委托和lambda

    Java面向对象基础知识之委托和lambda

    这篇文章主要介绍了Java面向对象的之委托和 lambda,文中有非常详细的代码示例,对正在学习java基础的小伙伴们有很好的帮助,需要的朋友可以参考下
    2021-11-11
  • IDEA在plugins里搜不到mybatisx插件的解决方法

    IDEA在plugins里搜不到mybatisx插件的解决方法

    本文主要介绍了IDEA在plugins里搜不到mybatisx插件的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • Java多线程实现模拟12306火车站售票系统

    Java多线程实现模拟12306火车站售票系统

    12360火车票售票系统基本上大家都用过,那你知道是怎么实现的吗,今天我们就模拟12306火车站售票系统来实现,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • 深入了解Java包与访问控制权限

    深入了解Java包与访问控制权限

    这篇文章主要带你掌握Java中包的定义及使用以及Java中的4种访问权限,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-09-09
  • 详细分析JVM类加载机制

    详细分析JVM类加载机制

    JVM将class文件字节码文件加载到内存中, 并将这些静态数据转换成方法区中的运行时数据结构,在堆(并不一定在堆中,HotSpot在方法区中)中生成一个代表这个类的java.lang.Class 对象,作为方法区类数据的访问入口,接下来将详细讲解JVM类加载机制
    2022-04-04
  • Spring Boot创建非可执行jar包的实例教程

    Spring Boot创建非可执行jar包的实例教程

    这篇文章主要介绍了Spring Boot创建非可执行jar包的实例教程,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • ByteArrayOutputStream简介和使用_动力节点Java学院整理

    ByteArrayOutputStream简介和使用_动力节点Java学院整理

    ByteArrayOutputStream 是字节数组输出流。它继承于OutputStream。这篇文章主要介绍了ByteArrayOutputStream简介和使用,需要的朋友可以参考下
    2017-05-05
  • JSP request.setAttribute()详解及实例

    JSP request.setAttribute()详解及实例

    这篇文章主要介绍了 javascript request.setAttribute()详解及实例的相关资料,需要的朋友可以参考下
    2017-02-02
  • spring boot读取Excel操作示例

    spring boot读取Excel操作示例

    这篇文章主要介绍了spring boot读取Excel操作,结合实例形式详细分析了spring boot解析、读取Excel相关操作技巧,需要的朋友可以参考下
    2019-11-11
  • springmvc @RequestBody String类型参数的使用

    springmvc @RequestBody String类型参数的使用

    这篇文章主要介绍了springmvc @RequestBody String类型参数的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10

最新评论