java 注解处理器(AbstractProcessor) 获取到 指定注解的属性值 javapoet 如何使用这个值生成类?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 注解处理器(AbstractProcessor) 获取到 指定注解的属性值 javapoet 如何使用这个值生成类?相关的知识,希望对你有一定的参考价值。
通过注解处理器 在编译期 获取指定注解的方法 根据方法获取方法上其他的注解及注解的属性和属性值通过 javapoet 生成类 类生成方法 并把获取到的注解和注解的属性及属性值一并生成在使用过程中 遇到如下问题 因为 获取到的注解的 属性值为 AnnotationValue 类型javapoet 中 添加的注解代码为 AnnotationSpec.Builder(注解类).addMember(String name, String format, Object... args)导致如下问题 如果注解的属性值是数组类型生成 如:method(@AnnotationName(value="/"v1/",/v2"/"))正确的应该是 method(@AnnotationName(value="v1","v2"))导致生成的代码是不正确的如果注解的属性值是其他类型 也存在在问题请问 javapoet 在生成主角属性值的时候 如何处理AnnotationValue即 如何能根据AnnotationValue 正确的处理 注解的属性值 能生成正确的代码 ?如何能判断出AnnotatIonValue 对象对应的值类型是那种?注解的属性值 包含 基础类型 注解 数组 等
定义:注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。 参考技术A 需要一个注释处理器类 继承AbstractProcessor然后 JavaFileObject source = processingEnv.getFiler().createSourceFile(sourceFile);
通过source 写入
Java注解处理器
这几天看公司一个中间件对异步的支持的新特性中,它使用注解处理器来自动生成异步接口。就看了下如何使用注解及编译期注解处理器,一下是些学习笔记吧!
此处说的Java注解及注解处理器,不是运行期注解及使用Class对象和反射来处理的处理器!而是编译期处理的源文件注解(RetentionPolicy.SOURCE);其注解处理器(Annotation Processor)是javac的一个工具,它用来在编译时扫描和处理注解(Annotation)。你可以对自定义注解,并注册相应的注解处理器。
用途
编译期注解处理器以Java源文件为输入,生成文件(一般是Java源文件,是生成不是修改)作为输出;这些生成的Java文件,会同其他普通的手动编写的Java源代码一样被javac编译。所以一般回用编译期注解处理来自动生成比较麻烦的代码或通过自动生成代码达到兼容新特性的需求
Java源文件
既然编译期注解处理器的输入为Java源文件。那我们就看看他是怎么处理的源文件吧
编译期注解处理器把Java源文件看成一个结构化的文本,而不是一个可编译的Java源文件;源代码的各个部分都是一个特定类型的Element,换句话说:Element
代表程序的元素,例如包、类或者方法。每个Element
代表一个静态的、语言级别的构件。Java中定义的Element有一下几种:
(未完)
参考
https://race604.com/annotation-processing/
http://www.cnblogs.com/avenwu/p/4173899.html
http://blog.csdn.net/haveferrair/article/details/52182927
以上是关于java 注解处理器(AbstractProcessor) 获取到 指定注解的属性值 javapoet 如何使用这个值生成类?的主要内容,如果未能解决你的问题,请参考以下文章
深入理解Java:注解(Annotation)--注解处理器
Java注解-注解处理器(运行时|RetentionPolicy.RUNTIME)
深入理解Java:注解(Annotation)--注解处理器