Table of Contents
annotation 的目的是什么 — 提供预处理机制,能够对代码本身扩展
在使用java编码时,我们会遇到一些重复编码的工作。这边的重复不是指逻辑上
的重复,而是指代码编写上的重复。编码过程上的重复,很难使用代码来做抽象
描述。这时候,就不自觉的怀念其C中的宏定义(define), 让我们有机会再提前一
部,在预处理器预处理阶段,对代码本身进行扩展与自动编写。Java中也提供了
类似的机制,减轻重复编码工作 — Annotation Prossor.
简介
这3个pkgs中定义了annotation processor的2个大的概念: annotation与processor
java.lang.annotation
javax.annotation
javax.annotation.processing
其中有一个很有趣的语法 `@interface`, ‘interface’是接口定义,那么前面加
个’@’,就是定义接口本身了。
几个重要的类
class | description | relative |
---|---|---|
Retention | 该声明可以保留到什么时候 | RetentionPolicy |
Target | 该声明可以用在什么定义上 | ElementType |
Processor | 预处理的回调类 |
当我们写完半自动化代码后,将它压制成jar,我们还需要告诉javac从那边加载
这个annatation(入口在哪里)。这个位置是固定的:
-rw-rw-rw- 39 24-Apr-2015 17:28:22 META-INF/services/javax.annotation.processing.Processor
然后我们在工程中,打开annotation预处理开关,并指定到之前压制出来的jar,
就能够使用上我们的半自动化代码了.
eclipse中的调试
编写annotation processor过程中,不可避免的需要调试。Eclipse可以使用
plugin方式,来调试开发项目特定的annotation processor代码。
https://code.google.com/p/acris/wiki/AnnotationProcessing_DebuggingEclipse
其它
- 想要更好的编写annotation processor代码,需要对java语法语义及定义有
了解。因为需要对代码本身做处理。 - 编写工具类可以加快编写流程,annotation processor都是非常底层的api操
作 - 受到启发的项目 Realm-java, ButterKnife
- some links
http://kerebus.com/2011/02/using-java-6-processors-in-eclipse/
http://www.cnblogs.com/bingoidea/archive/2011/03/31/2000726.html
http://hannesdorfmann.com/annotation-processing/annotationprocessing101/
http://docs.oracle.com/javase/1.5.0/docs/guide/apt/GettingStarted.html