Java注解

本文详细介绍了Java注解的工作原理,包括其生命周期、作用范围及如何通过注解处理器在编译阶段生成代码等内容。

注解

 

运行

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

  1. 解析和填充符号表过程,生成语法树
  2. 插入式注解处理器的注解处理过程,可以操作语法树。

    1. 这个操作语法树的特性,可以让注解生成代码或者填充默认值
    2. Google的AutoValue值类型生成类库
  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(类型)可以用在class, interface ,eumn,annotation上面
  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

     

    结果运行图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值