欢迎来到天天文库
浏览记录
ID:39633747
大小:83.50 KB
页数:11页
时间:2019-07-07
《一小时搞明白注解处理器(Annotation Processor Tool)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、一小时搞明白注解处理器(AnnotationProcessorTool)什么是注解处理器?注解处理器是(AnnotationProcessor)是javac的一个工具,用来在编译时扫描和编译和处理注解(Annotation)。你可以自己定义注解和注解处理器去搞一些事情。一个注解处理器它以Java代码或者(编译过的字节码)作为输入,生成文件(通常是java文件)。这些生成的java文件不能修改,并且会同其手动编写的java代码一样会被javac编译。看到这里加上之前理解,应该明白大概的过程了,就是把标记了注解的类,变量等作为输入内容,经过注解处理器处理
2、,生成想要生成的java代码。处理器AbstractProcessor处理器的写法有固定的套路,继承AbstractProcessor。如下:[java]viewplaincopy在CODE上查看代码片派生到我的代码片publicclassMyProcessorextendsAbstractProcessor{@Overridepublicsynchronizedvoidinit(ProcessingEnvironmentprocessingEnv){super.init(processingEnv);}@OverridepublicSet3、ng>getSupportedAnnotationTypes(){returnnull;}@OverridepublicSourceVersiongetSupportedSourceVersion(){returnSourceVersion.latestSupported();}@Overridepublicbooleanprocess(Setannotations,RoundEnvironmentroundEnv){returntrue;}}init(ProcessingEnvironmentprocess4、ingEnv)被注解处理工具调用,参数ProcessingEnvironment提供了Element,Filer,Messager等工具getSupportedAnnotationTypes()指定注解处理器是注册给那一个注解的,它是一个字符串的集合,意味着可以支持多个类型的注解,并且字符串是合法全名。getSupportedSourceVersion指定Java版本process(Setannotations,RoundEnvironmentroundEnv)这个也是最主要的,在这里扫描和处理你的注解并生成5、Java代码,信息都在参数RoundEnvironment里了,后面会介绍。在Java7中还可以使用[java]viewplaincopy在CODE上查看代码片派生到我的代码片@SupportedSourceVersion(SourceVersion.latestSupported())@SupportedAnnotationTypes({//合法注解全名的集合})代替getSupportedSourceVersion()和getSupportedAnnotationType(),没毛病,还可以在注解处理离器中使用注解。注册注解处理器打包注解处理器的6、时候需要一个特殊的文件javax.annotation.processing.Processor在META-INF/services路径下[plain]viewplaincopy在CODE上查看代码片派生到我的代码片--myprcessor.jar----com------example--------MyProcessor.class----META-INF------services--------javax.annotation.processing.Processor打包进javax.annotation.processing.Process7、or的内容是处理器的合法全称,多个处理器之间换行。[plain]viewplaincopy在CODE上查看代码片派生到我的代码片com.example.myprocess.MyProcessorAcom.example.myprocess.MyProcessorBgoogle提供了一个注册处理器的库[plain]viewplaincopy在CODE上查看代码片派生到我的代码片compile'com.google.auto.service:auto-service:1.0-rc2'一个注解搞定:[java]viewplaincopy在CODE上查看代码8、片派生到我的代码片@AutoService(Processor.class)publicclassMyPro
3、ng>getSupportedAnnotationTypes(){returnnull;}@OverridepublicSourceVersiongetSupportedSourceVersion(){returnSourceVersion.latestSupported();}@Overridepublicbooleanprocess(Setannotations,RoundEnvironmentroundEnv){returntrue;}}init(ProcessingEnvironmentprocess
4、ingEnv)被注解处理工具调用,参数ProcessingEnvironment提供了Element,Filer,Messager等工具getSupportedAnnotationTypes()指定注解处理器是注册给那一个注解的,它是一个字符串的集合,意味着可以支持多个类型的注解,并且字符串是合法全名。getSupportedSourceVersion指定Java版本process(Setannotations,RoundEnvironmentroundEnv)这个也是最主要的,在这里扫描和处理你的注解并生成
5、Java代码,信息都在参数RoundEnvironment里了,后面会介绍。在Java7中还可以使用[java]viewplaincopy在CODE上查看代码片派生到我的代码片@SupportedSourceVersion(SourceVersion.latestSupported())@SupportedAnnotationTypes({//合法注解全名的集合})代替getSupportedSourceVersion()和getSupportedAnnotationType(),没毛病,还可以在注解处理离器中使用注解。注册注解处理器打包注解处理器的
6、时候需要一个特殊的文件javax.annotation.processing.Processor在META-INF/services路径下[plain]viewplaincopy在CODE上查看代码片派生到我的代码片--myprcessor.jar----com------example--------MyProcessor.class----META-INF------services--------javax.annotation.processing.Processor打包进javax.annotation.processing.Process
7、or的内容是处理器的合法全称,多个处理器之间换行。[plain]viewplaincopy在CODE上查看代码片派生到我的代码片com.example.myprocess.MyProcessorAcom.example.myprocess.MyProcessorBgoogle提供了一个注册处理器的库[plain]viewplaincopy在CODE上查看代码片派生到我的代码片compile'com.google.auto.service:auto-service:1.0-rc2'一个注解搞定:[java]viewplaincopy在CODE上查看代码
8、片派生到我的代码片@AutoService(Processor.class)publicclassMyPro
此文档下载收益归作者所有