栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【JAVA】<注解Annotation>自定义注解&元注解解析

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【JAVA】<注解Annotation>自定义注解&元注解解析

 目录

一、注解Annotation概述:

二、常见的注解示例:

1.生成文档相关注解:

2.编译时格式检查注解(JDK内置三个基本注解):

 3.跟踪代码依赖性,实现替代配置文件功能:

三、自定义注解:

四、JDK中的元注解:

1.Retention(保留):

2.Target(目标):

Enum ElementType:

3.documented(文档):

4.Inherited(遗传):

五、Java8 新特性:可重复注解&类型注解

1.可重复注解:

2.类型注解:


一、注解Annotation概述:

        JDK 5.0,Java增加了对元数据(meta Data)的支持,也就是Annotation(注解)

        Annotation就是代码里的特殊标记,这些标记可以在编译。类加载,运行时被读取,并执行相应的处理。通过使用Annotation,程序员可以在不改变原有代码逻辑的基础上,在源文件中嵌入一些补充信息。代码分析工具、开发工具和部署工具可以通过这些补充信息进行验证或者进行部署。

        Annotation可以像修饰符一样被使用,可用于修饰包,类,构造器,方法,成员变量,局部变量的声明,这些信息被保存在Annotation的"name = value"对中。


二、常见的注解示例:

1.生成文档相关注解:

2.编译时格式检查注解(JDK内置三个基本注解):
  • @Override:限定重写父类方法,该注解只能用于方法
  • @Deprecated:用于表示所修饰的元素(类,方法等)已经过时。通常是因为所修饰的结构危险或者有更优选择
  • @SuppressWarnings:抑制编译警告

 3.跟踪代码依赖性,实现替代配置文件功能:

        例如:Servlet3.0 提供了注解(Annotation),使得不再需要xml配置文件中对Servlet进行部署。框架中含有大量注解


三、自定义注解:
  • 使用@interface来申明注解,自定义新的Annotation使用@interface关键字
  • 自定义注解继承了java.lang.annotation.Annotation接口
  • Annotation的成员变量在Annotation定义中以无参数方法的形式来声明。其方法名和返回值定义了该成员属性的名字和类型。我们称为配置参数。类型只能时八种基本数据类型、String类型、Class类型、enum类型,Annotation类型,以上所有类型的数组。
  • 可以在定义Annotation的成员变量时为其指定初始值,指定成员变量的初始值可以使用default关键字
  • 如果只有一个参数成员,建议使用参数名value
  • 如果定义的注解含有多个配置参数,那么使用时必须指定参数值,除非它有默认值,格式:"参数名 = 参数值",如果只有一个参数成员,且名称为value,可以省略"value="
  • 没有成员定义恶的Annoation称为标记;包含成员变量的Annotation称为元数据Annotation
//使用@interface声明注解
public @interface MyAnnotation {

    //使用方法格式定义成员变量,方法名为参数名,返回值类型为参数类型,default指定默认参数值
    String value01() default "krian";
    String value02() default "king";
}

四、JDK中的元注解:
  • JDK的元注解Annotation用于修饰其它Annotation定义
  • JDK 5.0 提供了4个标准得meta-annotation类型:
    • Retention
    • Target
    • documented
    • Inherited

元数据

1.Retention(保留):

        Retention注解有一个属性value,是RetentionPolicy类型的,Enum RetentionPolicy是一个枚举类型,
        这个枚举决定了Retention注解应该如何去保持,也可理解为Rentention 搭配         RententionPolicy使用。RetentionPolicy有3个值:CLASS  RUNTIME   SOURCE
按生命周期来划分可分为3类:

  • RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;
  • RetentionPolicy.CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期;
  • RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在; 只有声明为RUNTIME声明周期得注解,才能通过反射获取。

        这3个生命周期分别对应于:Java源文件(.java文件) ---> .class文件 ---> 内存中的字节码。

生命周期:

        首先要明确生命周期长度 SOURCE < CLASS < RUNTIME ,所以前者能作用的地方后者一定也能作用。
        一般如果需要在运行时去动态获取注解信息,那只能用 RUNTIME 注解,比如@Deprecated使用RUNTIME注解
        如果要在编译时进行一些预处理操作,比如生成一些辅助代码(如 ButterKnife),就用 CLASS注解;
        如果只是做一些检查性的操作,比如 @Override 和 @SuppressWarnings,使用SOURCE 注解。

2.Target(目标):

        @Target,用于修饰Annotation定义,用于指定被修饰的Annotation能用于修饰哪些程序元素。@Target也包含一个名为value的成员变量:

Enum ElementType:

3.documented(文档):

        @documented,用于指定被该元注解修饰的注解类将被javadoc工具提取成文档,默认情况下,javadoc是不包括注解的。定义为documented的注解必须设置Retention值为RUNTIME

4.Inherited(遗传):

        @Inherited,被他修饰的注解将具有继承性,如果某个类使用了被Inherited元注解修饰的注解,则其子类将自动具有该注解。


五、Java8 新特性:可重复注解&类型注解

1.可重复注解:

        可重复注解就是指:注解可以重复定义多个。jdk8之前的方式,要用数组来实现重复注解。

可重复注解的实现步骤:

  1. 在MyAnnotation上去声明@Repeatable(MyAnnotations.class),成员值为MyAnnotations.class让这两个注解关联在一起
  2. MyAnnotation的Target元注解和Retention元注解和MyAnnotations相同
  3. 且要么都有@Inherited修饰,要么都没有这个东西修饰,否则运行出错
  4. 两者的元注解需要是相同的

2.类型注解:
  • ElementType.TYPE_PARAMETER:表示该注解能写在类型变量的声明语句中(泛型)
  • ElementType.TYPE_USE:表示该注解能写在使用类型恶的任何语句中。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/685177.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号