• 【注解】概述、自定义注解以及元注解


    注解——概述、自定义注解以及元注解

    1.概述

    注解(Annotation)

    • 就是Java代码里的特殊标记,比如:@Override、@Test等,作用是让其他程序根据注解信息来决定怎么执行该程序
    • 注意:注解可以用在类上、构造器上、方法上、成员变量上、参数上等位置处
    2.自定义注解
    • 就是自己定义注解

      public @interface 注解名称
          public 属性类型 属性名() default 默认值;
      
      • 1
      • 2
    • 特殊属性名:value

      如果注解中只有一个value属性,使用注解时,value名称可以不用写

    • 注解原理

      (1)注解本质是一个接口,Java中所有注解都继承了Annotation接口

      (2)注解格式"@注解(…)",本质上就是该注解的一个实现类对象,实现了该注解以及Annotation

    public @interface Anno1 {
        //基本类型
        public int a() default 18;
        //String
        public String name(); //没有默认值default可以省略
        //Class
        public Class clazz() default Anno2.class;
        //注解
        public Anno2 anno() default @Anno2;
        //枚举
        public Season season() default Season.SPRING;
        //以上类型的一维数组
        public int[] arr() default {1, 2, 3, 4, 5};
        public Season[] seasons() default {Season.SPRING, Season.SUMMER};
    }
    
    //如果属性没有指定默认值,使用需要手动指定默认值(Anno1中的name没有默认值)
    @Anno1(name = "tom")
    @MyAnno("tom")
    class Test {
    
    }
    
    @interface Anno2 {
    
    }
    
    @interface MyAnno {
        //特殊属性名:value
        String value();
    }
    
    enum Season {
        SPRING, SUMMER, AUTUMN, WINTER
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    注解中的属性类型:基本类型、String、Class、注解、枚举以上类型的一维数组

    3.元注解
    • 指的是:修饰注解的注解

    @Target

    作用:声明被修饰注解能使用的位置

    @Target(ElementType.TYPE)

    • TYPE,类,接口
    • FIELD,成员变量
    • METHOD,成员方法
    • PARAMETER,方法参数
    • COSTRUCTOR,构造器
    • LOCAL_VARIABLE,局部变量

    @Retention

    作用:声明注解的保留周期

    @Retention(RetentionPolicy.RUNTIME)

    • SOURCE:只作用在源码阶段,字节码文件中不存在
    • CLASS(默认值):保留到字节码文件阶段,运行阶段不存在
    • RUNTIME(开发常用):一直保留到运行阶段
    @MyAnno
    public class Demo {
        @MyAnno
        private String name;
    
        @MyAnno
        public void test() {
    
        }
    }
    
    //1、声明被修饰注解的使用位置
    @Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})
    
    //2、声明注解的保留周期(查看@Test上的元注解)
    @Retention(RetentionPolicy.RUNTIME)
    @interface MyAnno {
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
  • 相关阅读:
    Java Spring Boot中的爬虫防护机制
    vue3 element-ui-plus Carousel 跑马灯 的使用 及 踩坑记录
    用JavaScript撸一个静态链表
    Linux基本常用命令大全(附案例实战)
    linux之查看端口占用
    【ArcGIS Pro二次开发】(69):使用MapTool实现隐藏和隔离图层
    【大话云原生】负载均衡篇-小饭馆客流量变大了
    浏览器解析网站原理
    【broadcast-service】一个轻量级Python发布订阅者框架
    ubuntu部署若依vue版
  • 原文地址:https://blog.csdn.net/m0_65462447/article/details/133562990