zoukankan      html  css  js  c++  java
  • 元注解

    元注解

    1. Annotation(注解)

    从JDK 1.5开始, Java增加了对元数据(MetaData)的支持,也就是 Annotation(注解)。

    注解其实就是代码里的特殊标记,它用于替代配置文件:传统方式通过配置文件告诉类如何运行,有了注解技术后,开发人员可以通过注解告诉类如何运行。在Java技术里注解的典型应用是:可以通过反射技术去得到类里面的注解,以决定怎么去运行类。

    注解可以标记在包、类、属性、方法,方法参数以及局部变量上,且同一个地方可以同时标记多个注解。

    2. meta-annotation(元注解)

    除了直接使用JDK 定义好的注解,我们还可以自定义注解,在JDK 1.5中提供了4个标准的用来对注解类型进行注解的注解类,我们称之为 meta-annotation(元注解),他们分别是:

    • @Target
    • @Retention
    • @Documented
    • @Inherited

    我们可以使用这4个元注解来对我们自定义的注解类型进行注解,接下来,我们挨个对这4个元注解的作用进行介绍。

    2.1 @Target注解

    Target注解的作用是:描述注解的使用范围(即:被修饰的注解可以用在什么地方) 。

    Target注解用来说明那些被它所注解的注解类可修饰的对象范围:注解可以用于修饰 packages、types(类、接口、枚举、注解类)、类成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数),在定义注解类时使用了@Target 能够更加清晰的知道它能够被用来修饰哪些对象,它的取值范围定义在ElementType 枚举中。

    public enum ElementType {
     
        TYPE, // 类、接口、枚举类
     
        FIELD, // 成员变量(包括:枚举常量)
     
        METHOD, // 成员方法
     
        PARAMETER, // 方法参数
     
        CONSTRUCTOR, // 构造方法
     
        LOCAL_VARIABLE, // 局部变量
     
        ANNOTATION_TYPE, // 注解类
     
        PACKAGE, // 可用于修饰:包
     
        TYPE_PARAMETER, // 类型参数,JDK 1.8 新增
     
        TYPE_USE // 使用类型的任何地方,JDK 1.8 新增
     
    }
    

    2.2 @Retention注解

    Reteniton注解的作用是:描述注解保留的时间范围(即:被描述的注解在它所修饰的类中可以被保留到何时)

    Reteniton注解用来限定那些被它所注解的注解类在注解到其他类上以后,可被保留到何时,一共有三种策略,定义在RetentionPolicy枚举中。

    public enum RetentionPolicy {
        SOURCE,    // 源文件保留
        CLASS,       // 编译期保留,默认值
        RUNTIME   // 运行期保留,可通过反射去获取注解信息
    }
    

    2.3 @Documented注解

    Documented注解的作用是:描述在使用 javadoc 工具为类生成帮助文档时是否要保留其注解信息。

    下面是添加@Documented的情况

    在这里插入图片描述

    下面是不加@Documented的情况

    在这里插入图片描述

    2.4 @Inherited注解

    Inherited注解的作用是:使被它修饰的注解具有继承性(如果某个类使用了被@Inherited修饰的注解,则其子类将自动具有该注解)。

  • 相关阅读:
    DVWA-7.3 SQL Injection(SQL注入)-High
    DVWA-7.2 SQL Injection(SQL注入)-Medium-绕过引号转义
    记一次错误
    笔记3
    笔记2
    题目--猜数字
    java基础-流程控制
    Python垃圾回收机制
    @staticmethod和@classmethod的作用与区别
    java转python代码
  • 原文地址:https://www.cnblogs.com/zhangguangxiang/p/14300713.html
Copyright © 2011-2022 走看看