注解

注解

 

运行

Sun JDK字节码生成分为三个阶段:

  1. 解析和填充符号表过程,生成语法树
  2. 插入式注解处理器的注解处理过程,可以操作语法树。
    1. 这个操作语法树的特性,可以让注解生成代码或者填充默认值
    2. GoogleAutoValue值类型生成类库
  3. 分析与字节码生成。

作用阶段

枚举类型 java.lang.annotation.RetentionPolicy

  1. SOURCE表示这个Annotation类型的信息只会保留在源码里,源码经过编译之后,Annotation的数据就会消失,并不会保留在编译好的. class文件里;
  2. CLASS表示这个Annotation类型的信息在源码保留,在.class文件也保留,但不会把这些信息加载到虚拟机(JVM)中,如果不设置, 系统默认值是CLASS
  3. RUNTIME表示在源码,编译后的.class都保存信息,在执行的时候也会把这些信息加载到JVM

作用范围

枚举类型 java.lang.annotation.ElementType

  1. TYPE(类型)可以用在classinterface eumnannotation上面
  2. FILED(字段)
  3. METHOD(方法)
  4. PARAMETER(参数)
  5. CONSTRUCTOR(构造器)
  6. LOCAL_VARIABLE(局部变量)
  7. ANNITATION_TYPE(注解)
  8. PACKAGE(包)其中TYPE是指,如果没有制定, 那么它可以用在任何上面

    我们写一个最简单的注解,可以为类和字段上使用,作用于运行期间

    测试类

    我们可以通过反射获取类、方法、字段上的注解,根据注解的类型,我们可以获取注解的值,进而,把值赋值给操作对象。

    结果是熟悉的儿歌O(_)O哈哈~

     

    注解处理器

    注解处理器在编译期发生作用,被注解处理器支持的注解标记的类、字段、方法,可以被注解处理器改变语法树,生成新的类或者字节码。这里用注解处理器处理java Bean生成模板。

    自定义javaSe.special.annotation.processor.AutoValue.java

    Java Bean

     

    注解处理器

    比较重要的几个要重写的方法,可以用注解赋值如下,或者重写父类对应的方法。

    必须要重写的方法:

    需要支持的java源码版本

    一个或多个支持的注解类型

    处理程序。

    编译及结果

    javac

    //指定自定义注解相关字节码classpath

    -cp E:\work4java\MyJavaDesign\src

    //指定自定义注解处理器

    -processor javaSe.special.annotation.processor.AutoValueProcessor

    //指定自定义注解处理器根路径

    -processorpath E:\work4java\MyJavaDesign\src

    //要编译的一个或多个类

    E:\work4java\MyJavaDesign\src\javaSe\special\annotation\processor\Student.java E:\work4java\MyJavaDesign\src\javaSe\special\annotation\processor\Teacher.java

     

    结果运行图:

posted @ 2017-07-08 12:36  jiumao  阅读(190)  评论(0编辑  收藏  举报