- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[计算机软件及应用]注解
编译器要求注解的参数参数不能是不确定值,即要么在定义注解的时候就进行赋值,要么在使用的时候进行赋值。 如果定义一个参数而未进行赋值,则编译器会抛出一个错误:The annotation must define the attribute value。 @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface ID { public String value(); public String description() default ; } public class Person { @ID(personID) private Integer id; } 如果没有读取分析注解的工具,那注解就不会比注释更有用。 JDK5扩展了反射机制的API,可以帮助程序员有效的创建这类工具,而且,它还提供了一个外部工具apt,用于帮助程序员分析处理注解。 要想使用反射去读取注解,必须将Retention的值选为Runtime Apt是由sun开发的一款用于处理注解的工具。 apt与javac一样用于处理源代码级别的命令。 默认情况下apt会在代码未编译前对代码进行分析处理。 Apt首先通过注解处理器分析处理用户编写的源文件,如果该轮处理的过程中产生了新文件,则apt会对产生的文件进行新一轮的处理,直至不再产生新文件为止,然后将这些文件一同编译,因此一般情况下apt命令包含了javac的功能。 apt是一个命令行工具,与之配套的还有一套用来描述程序语义结构的Mirror API。 Mirror API(com.sun.mirror.*)描述的是程序在编译时刻的静态结构。通过Mirror API可以获取到被注解的Java类型元素的信息,从而提供相应的处理逻辑。具体的处理工作交给apt工具来完成。 编写注解处理器的核心是AnnotationProcessorFactory和AnnotationProcessor两个接口。后者表示的是注解处理器,而前者则是为某些注解类型创建注解处理器的工厂。 编写Apt应用一般包括以下四个步骤: 编写需要进行注解处理的类(一般地,这些类应该带有需要处理的注解)。 实现至少一个AnnotationProcessorFactory。 实现AnnotationProcessor。 使用APT命令行,执行注解处理。 描述代码分工安排的注解。通过该注解可以在源代码中记录每个类或接口的分工和进度情况。 @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface Assignment { String assignee(); int effort(); double finished() default 0; } AnnotationProcessorFactory接口有三个方法: getProcessorFor是根据注解的类型来返回特定的注解处理器; supportedAnnotationTypes是返回该工厂生成的注解处理器所能支持的注解类型; supportedOptions用来表示所支持的附加选项。在运行apt命令行工具的时候,可以通过-A来传递额外的参数给注解处理器,如-A verbose=true。当工厂通过 supportedOptions方法声明了所能识别的附加选项之后,注解处理器就可以在运行时刻通过AnnotationProcessorEnvironment的getOptions方法获取到选项的实际值。 public class AssignmentApf implements AnnotationProcessorFactory { public AnnotationProcessor getProcessorFor(SetAnnotationTypeDeclaration atds,? AnnotationProcessorEnvironment env) { if (atds.isEmpty()) { return AnnotationProcessors.NO_OP; } return new AssignmentAp(env); //返回注解处理器 } public CollectionString supportedAnnotationTypes() { return Collections.unmodifiableList(Arrays.asList(annotation.Assignment)
原创力文档


文档评论(0)