JAVA注解(Annotation)相关学习笔记

1、元注解:

        元注解的做用就是负责注解其余注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型做说明。Java5.0定义的元注解:java

  1. @Target
  2. @Retention
  3. @Documented
  4. @Inherited

@Target({ElementType.METHOD,ElementType.Type})

    用于说明该注解的做用域.基本上囊括了全部地方:ElementType可选数组

  • CONSTRUCTOR   --构造方法声明
  • FIELD     -- 字段声明
  • LOCAL_VARIABLE   --局部变量声明
  • METHOD    --方法声明
  • PACKAGE   --参数声明
  • TYPE    --类,接口

 

 @Retention(RetentionPlicy.RUNTIME)

    该元注解用于声明注解的生命周期:RetentionPlicy 可选函数

  • SOURCE   --只在源码显示,编译时会丢弃
  • CLASS    --编译时会记录到class中,运行时忽略
  • RUNTIME     --运行时存在,能够经过反射读取

@Inherited

    标注性注解,代表该注解是否容许被子注解继承ui

@Documented

    生成javadoc时会包含该注解spa

 

2、自定义注解

    使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口,由编译程序自动完成其余细节。在定义注解时,不能继承其余的注解或接口。@interface用来声明一个注解,其中的每个方法其实是声明了一个配置参数。方法的名称就是参数的名称,返回值类型就是参数的类型(返回值类型只能是基本类型、Class、String、enum)。能够经过default来声明参数的默认值。.net

    定义注解格式:

        public @interface 注解名 {定义体}code

    注解参数的可支持数据类型:

  1. 全部基本数据类型(int,float,boolean,byte,double,char,long,short)
  2. String类型
  3. Class类型
  4. enum类型
  5. Annotation类型
  6. 以上全部类型的数组

例如:继承

/**
 * 水果颜色注解
 * @author peida
 *
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FruitColor {
    /**
     * 颜色枚举
     * @author peida
     *
     */
    public enum Color{ BULE,RED,GREEN};
    
    /**
     * 颜色属性
     * @return
     */
    Color fruitColor() default Color.GREEN;

}

 

3、解析注解

    概念:经过反射获取类,函数或成员上的运行时注解信息,从而实现动态控制程序运行的逻辑接口

  1. 使用类加载器加载类  c = Class.forName("")
  2. 找到类上面的注解该类上是否存在Description这个注解   boolean isExist = c.isAnnotationPresent(Description.class)
  3. 拿到注解实例   Description d = (Description)c.getAnnotation(Description.class)
  4. 找到方法上的注解  Method[] ms = c.getMethods
相关文章
相关标签/搜索