自定义注解

素颜马尾好姑娘i 2022-09-02 04:18 326阅读 0赞

什么是注解?

  1. JDK5开始,Java增加对元数据的支持,也就是注解,注解与注释是有一定区别的,可以把注解理解为代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过注解开发人员可以在不改变原有代码和逻辑的情况下在源代码中嵌入补充信息。
  2. **其实说白就是代码里的特殊标志,这些标志可以在编译,类加载,运行时被读取,并执行相应的处理,以便于其他工具补充信息或者进行部署。**

JDK的元Annotation(元注解)?

  1. jdk中包含了一些元注解,主要有@Target@Retention@Document@Inherited@Result用来修饰注解。

@Target

用于指定被修饰的注解能用于修饰哪些程序单元,@Target也包含了一个value值








































取值 注解使用范围
METHOD 可用于方法上
TYPE 可用于类或者接口上
ANNOTATION_TYPE 可用于注解类型上(被@interface修饰的类型)
CONSTRUCTOR 可用于构造方法上
FIELD 可用于域上
LOCAL_VARIABLE 可用于局部变量上
PACKAGE 用于记录java文件的package信息
PARAMETER 可用于参数上

@Retention

用于被修饰的注解可以保存多久,这个注解需要使用参数






















生命周期类型 描述
RetentionPolicy.SOURCE 编译时被丢弃,不包含在类文件中
RetentionPolicy.CLASS JVM加载时被丢弃,包含在类文件中,默认值
RetentionPolicy.RUNTIME 由JVM 加载,包含在类文件中,在运行时可以被获取到

@Document

这个注解用于指定被修饰的注解类将被javadoc工具提取成文档(该注解了解即可)

@Inherited

这个注解指定被他修饰的注解将具有继承性——如果某个类使用了@Xxx,则其子类将自动被@Xxx修饰

" class="reference-link">SpringBoot启动类上默认用了以上的元注解watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI3MDI2NjAz_size_16_color_FFFFFF_t_70

自定义注解?

1、定义一个注解接口,必须需要 @Retention元注解 标明生命周期,否则不会生效

  1. package com.liu.annotation;
  2. //自定义一个注解
  3. //1、包含了public修饰符
  4. //2、包含了@interface关键词
  5. //3、TestAnno : 为具体的注解名称
  6. //4、注解内容:可以理解为自定义接口
  7. import java.lang.annotation.*;
  8. @Target(value = {ElementType.FIELD,ElementType.TYPE})
  9. @Documented
  10. @Inherited
  11. @Retention(value = RetentionPolicy.RUNTIME)
  12. public @interface CustomAnno {
  13. String name() default "阿军";
  14. boolean flag();
  15. }

2、写一个实体类,加上自定义注解

  1. package com.liu.annotation;
  2. @CustomAnno(flag = false,name = "程序员阿军")
  3. public class Emp {
  4. private String name;
  5. private boolean flag;
  6. @Override
  7. public String toString() {
  8. return "Emp{" +
  9. "name='" + name + '\'' +
  10. ", flag=" + flag +
  11. '}';
  12. }
  13. }

3、获取实体类的注解内容

  1. package com.liu.annotation;
  2. import java.lang.annotation.Annotation;
  3. import java.util.Arrays;
  4. public class TestAnno {
  5. public static void main(String[] args) {
  6. //获取Emp类注解信息
  7. Class<Emp> empClass = Emp.class;
  8. CustomAnno customAnno = empClass.getAnnotation(CustomAnno.class);
  9. System.out.println(customAnno.name()+"==="+customAnno.flag());
  10. //检查Emp对象是否有自定义注解(CustomAnno)
  11. boolean annotationPresent = empClass.isAnnotationPresent(CustomAnno.class);
  12. System.out.println(annotationPresent);
  13. //获取Emp上的所有自定义的注解
  14. Annotation[] annotations = empClass.getAnnotations();
  15. System.out.println(Arrays.toString(annotations));
  16. }
  17. }

4、运行结果

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI3MDI2NjAz_size_16_color_FFFFFF_t_70 1

发表评论

表情:
评论列表 (有 0 条评论,326人围观)

还没有评论,来说两句吧...

相关阅读

    相关 定义注解

    1、简单介绍注解 注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明

    相关 定义注解

    什么是注解?         从JDK5开始,Java增加对元数据的支持,也就是注解,注解与注释是有一定区别的,可以把注解理解为代码里的特殊标记,这些标记可以在编译,类加

    相关 定义注解

             注解是一种元数据形式,即注解是属于java的一种数据类型,和类、接口、数组、枚举类似。注解用来修饰,类、方法、变量、参数、包。注解不会对所修饰的代码产生直接的