自定义注解

一、 四个元注解

  1. @Retention:用于标明注解的生命周期,可分为3类,分别对应于Java源文件(.java文件) -> .class文件 -> 内存中的字节码
    • RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;
    • RetentionPolicy.CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期;
    • RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;
  2. @Target:标明注解的修饰目标。
    • TYPE:类、接口(包括注解类型)或枚举
    • FIELD:field属性,也包括enum常量使用的注解
    • METHOD:方法
    • PARAMETER:参数
    • CONSTRUCTOR:构造函数
    • LOCAL_VARIABLE:局部变量
    • ANNOTATION_TYPE:注解上使用的元注解
    • PACKAGE:包
    • TYPE_PARAMETER:自JDK1.8开始可用。表示该注解能写在类型参数的声明语句中也就是泛型上,类型参数声明如下:<T>,<T extends Person>
    • TYPE_USE:自JDK1.8开始可用。表示可以在任何用到类型的地方使用
  3. Documented:用于描述其它类型的注解应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。
  4. @Inherited:标记注解,允许子类继承父类的注解。

二、 代码Demo

  1. 自定义钉钉告警注解
import java.lang.annotation.*;

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
@Documented
public @interface DingTalkAlert {

    String methodName() default "";

    String alertMsg() default "";

    boolean atAll() default true;
}
  1. 注解使用在方法上
@DingTalkAlert(methodName = "test", alertMsg = "alert msg", atAll = true)
public void testMethod() {
    
}
  1. 结合拦截器/AOP,对该注解进行相关功能实现。
posted @ 2023-01-30 10:15  Fogram  阅读(23)  评论(0编辑  收藏  举报