zoukankan      html  css  js  c++  java
  • 【Java】Annotation 注解

    Annotation 注解

    注解是一种元数据 MetaData,从JDK5开始

    在Java代码中是一个特殊的标记,可以在编译,类加载,运行时读取,执行对应的处理

    程序可以在不改变原有逻辑的基础上嵌入一些补充信息,代码分析工具,开发工具,部署工具通过补充信息

    进行验证和部署

    注解可以使用在任何写代码的地方:

    - 包

    - 类

    - 构造器

    - 方法

    - 成员变量

    - 参数

    - 局部变量的声明

    信息被保存在 KV对中

    在我们学过的J2SE中,注解的使用目的很简单,只是为了标记功能

    - 标记过时方法和字段 @Deprecated

    - 标记编译器警告忽略 @SuppressWarnings

    - 标记方法是重写父类的方法 @Override

    EE/Andriod 的用途更为强大,用来配置程序的切面,配置注入参数信息

    在以后的发展中,注解将会越来越重要,现阶段的框架就是

    注解 + 反射 + 设计模式 

    摆脱繁琐的XML配置

    文档注解 Document Annotation

    @author 声明开发者名字,多个开发者使用逗号分隔  - @author 张三,李四,王五

    @version 开发版本  -@version 1.0

    @see 相关资料地址

    @since 从哪个版本开始有的

    @param 对参数的说明

    @return 对返回值的说明

    @exception 对可能抛出的异常的说明

    编译检查注解 CompileCheck Annotation

    - JDK内置的三个基本注解

    @Override 标记为重写的父类方法,仅标记方法

    @Deprecated 比较为已过时的方法,但是不妨碍调用,可标记在类和方法上

    @SuppressWarnings 抑制编译器警告,对波浪警告提示烦了?试试这个玩意儿

    自定义注解实现

    public @interface MyAnnotation { // 声明类一样声明注解 @interface
    
        // 注解的成员属性 定义在午餐方法中声明 属性只能声明默认的 protected public 这三种
        
        // 方法名即是属性的标识名,方法的返回类型就是属性的数据类型
        
        // 类型可以声明为 8个基本类型、类类型、枚举类型、注解类型?、和前面数据类型的数组
        
        // 可以声明default 为遍历指定初始值
        
        // 只有一个,且是最重要的参数 可使用value表示、 在注解的时候可以不用写 value = ? 直接写值即可
        
        // 定义的注解有配置参数,则必须指定参数值,也就是要赋值 除非存在默认初始值
        
        // 自定义注解必须配上注解的信息处理流程才有意义?
        String name();
    }
    
    // 使用注解
    @MyAnnotation(name = "hello")
    class AC{
        
    }

    声明default 默认可不需要赋值,适用于默认配置,我不想配置也可以用

    - 注解声明为@interface

    - 内部定义成员,不是方法!!! 通常使用value表示

    - 可以default声明默认值

    - 自定义注解如果没有成员,那么只是一个标记注解

    JDK元注解 Meta - Annotation

    - 用于注解注解的注解【给注解上注解!】

    4个标准元注解 

    @Retention

    @Target

    @Documented

    @Inherited

    元数据?对现有数据的一个修饰 String name = "阿伟"

    最重要的是阿伟这个值,元数据只是对他的修饰,

    name是值的标识,String是值的类型,这些被称为元数据

    所以也就是说,元注解是对注解的修饰规范

    @Retention  注解的生命周期

    该注解包含一个RetentionPolicy保留策略的枚举类

    用于标注注解的保留策略

    枚举项:

    - RetentionPolicy.SOURCE 保留在源码中,编译和运行丢弃

    - RetentionPolicy.CLASS 保留在字节码中,JVM运行丢弃 ,这是默认的保留策略

    - RetentionPolicy.RUNTIME 运行保留,程序可以反射获取注解信息

    @Target  可注解的位置

    该注解包含一个元素类型的枚举类数组

    用于标注注解的可标注位置

    枚举项:

    - TYPE 

    - FIELD

    - METHOD

    - PARAMETER

    - CONSTRUCTOR

    - LOCAL_VARIABLE

    - ANNOTATION_TYPE

    - PACKAGE

    - TYPE_PARAMETER  JDK8特性  可注解类类型 

    - TYPE_USE  JDK8特性  注解使用类类型

    @Documented  可生成文档的

    被注解的注解类可以被JavaDoc识别,并提取生成文档

    @Inherited  可继承的

    给自定义的注解类注解,自定义注解具有可继承性,

    当一个父类注解了自定义注解,其子类继承了父类也会拥有该注解

    JDK8  

    可重复注解?

    类型注解?

    重复注解意思是我们希望在一个地方可以使用多次一样的注解

    但是很明显这不允许!

    JDK8之前采用注解数组的办法实现兼容

    在注解时使用此注解

    JDK8增加了一个新的注解,用于这种情形

    @Repeatable  可重复的

    要注意的是两者的注解的@Retention生命周期、@Target可标注的位置必须一致,还有@Inherited

  • 相关阅读:
    97. Interleaving String
    96. Unique Binary Search Trees
    95. Unique Binary Search Trees II
    94. Binary Tree Inorder Traversal
    odoo many2many字段 指定打开的form视图
    docker sentry 配置文件位置
    postgres 计算时差
    postgres 字符操作补位,字符切割
    postgres判断字符串是否为时间,数字
    odoo fields_view_get
  • 原文地址:https://www.cnblogs.com/mindzone/p/12737333.html
Copyright © 2011-2022 走看看