• SpringBoot 自定义注解异步记录复杂日志


    1、背景

    最近接手一个任务,需要给当前项目加一个较为复杂的日志。有多复杂呢? 要有日志类型、不同日志类型要有不同的操作和备注等。作为小白的我最开始的做法是在业务层写代码记录日志,好处就是方便,坏处就是这种做法直接侵袭Service层,Service层无法做到职责单一了

    经导师点拨,改用自定义注解+AOP切面异步日志

    2、技术方案-自定义注解

    注解(Annotation),也叫元数据。

    2.1 注解介绍

    注解其实就是代码里的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相应的处理。通过使用注解,程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息

    2.2 元注解

    元注解用于修饰其他注解的注解,在JDK5.0中提供了四种元注解:Retention、Target、Documented、Inherited

    (1) Retention
    介绍: 用于修饰注解,用于指定修饰的哪个注解的声明周期。@Rentention包含一个RetentionPolicy枚举类型的成员变量,使用@Rentention时必须为该value成员变量指定值

    • RetentionPolicy.SOURCE:在源文件中有效(即源文件保留),编译器直接丢弃这种策略的注释,在.class文件中不会保留注解信息

    • RetentionPolicy.CLASS:在class文件中有效(即class保留),保留在.class文件中,但是当运行java程序时,他就不会继续加载了,不会保留在内存中,JVM不会保留注解。如果注解没有加Retention元注解,那么相当于默认的注解就是这种状态。

    • RetentionPolicy.RUNTIME:在运行有效(即运行时保留),当运行Java程序时,JVM会保留注释,加载在内存中,那么程序可以通过反射获取该注释

    1. @Documented
    2. @Retention(RetentionPolicy.RUNTIME)
    3. @Target(ElementType.ANNOTATION_TYPE)
    4. public @interface Retention {
    5. RetentionPolicy value();
    6. }
    7. public enum RetentionPolicy {
    8. SOURCE,
    9. CLASS,
    10. RUNTIME
    11. }
    12. 复制代码

    (2)

  • 相关阅读:
    AI 音辨世界:艺术小白的我,靠这个AI模型,速识音乐流派选择音乐 ⛵
    【从零开始学习 SystemVerilog】7.16、SystemVerilog 类—— Randomization(随机化)
    典型神经网络及应用论文,神经网络架构论文题目
    SpringMVC(七):SpringMVC的响应处理
    美团一面(手撕)
    HACKTHEBOX——Shocker
    数字信号处理——FFT运算模块设计(1)
    BCC源码下载
    Java多线程(三)
    从0开发属于自己的nestjs框架的mini 版 —— ioc篇
  • 原文地址:https://blog.csdn.net/java_beautiful/article/details/127087570