com.google.auto.service:auto-service:1.0-rc2' @AutoService(Processor.class) public class MyProcessor extends AbstractProcessor...R.layout.activity_main); MethodTest test = new MethodTest(); test.getMessage(); } } 注意:注解类和AbstractProcessor...AbstractProcessor中生成java类,可以使用JavaPoet开源库进行编写,提升效率
SupportedSourceVersion(SourceVersion.RELEASE_8) @AutoService(Processor.class) public class MyProcessor extends AbstractProcessor
每一轮都从编译器在源文件中搜索注解并选择适合这些注解的 注解处理器(AbstractProcessor) 开始。每个注解处理器依次在相应的源上被调用。...图TODO AbstractProcessor 这是注解处理器的核心抽象类,我们主要来看看里面的方法 getSupportedOptions() 默认的实现是 从注解SupportedOptions获取值...并不是说我们实现了AbstractProcessor类就会生效,由于注解处理器(AbstractProcessor) 是在编译期执行的,而且它是作为一个Jar包的形式来生效,所以我们需要将注解处理器作为一个单独的...这个注解处理器 所在Module打包的时候需要注意: 因为AbstractProcessor本质上是通过ServiceLoader来加载的(SPI), 所以想要被成功注册上。...AutoService 自动生成配置文件也是通过AbstractProcessor来实现的。
github.com/ 掘金文章 我:我写过一个路由跳转库,我通过了AbstractProcessor生成了路由表的注册类。...面试官: 既然你写过AbstractProcessor,那么我们来聊聊这个吧。 我:OK,放马过来,谁怂谁是狗。 面试官:那么kapt和transform有什么差别啊?...我:AbstractProcessor只能处理注解,然后根据注解通过javapoet生成一个新的java类。...面试官:嗯,那么下一个问题,你知道AbstractProcessor是在编译时的哪个环节操作的吗? 我:汪?...面试官:那么我们继续聊聊AbstractProcessor,当获取到的注解之后,如何判断实现了注解的Class是否继承自activity。 我:汪汪汪汪!!!!!
二、新建AbstractProcessor类的实现类。...com.autotestdemo.maomao.javalib.VInjector") @SupportedSourceVersion(SourceVersion.RELEASE_6) public class VInjectProcessor extends AbstractProcessor...根本找不到AbstractProcessor类。 原因是AbstractProcessor不在Android SDK里面! 所以我们要建【java工程】 但是我们最终要放在app里面运行的,怎么办?...那我们需要建一个java library的module来做为你主工程的引用工程,专门存放AbstractProcessor实例的相关内容。 建好library之后,需要在主工程引用它: ?...VInjector(id=1,name="Maomao",text="这是动态代码生成的") public class MainActivity extends AppCompatActivity { 四、实现AbstractProcessor
对于所有处理者,我们首先创建一个抽象的处理器类AbstractProcessor,再创建四个处理器的实现类,分别是CEO处理器CeoProcessor、法务部门处理器LawProcessor、业务部门处理器... abstract class AbstractProcessor { // 责任链中下一个处理节点 private AbstractProcessor nextProcessor; ...; }}创建法律部门处理类:LawProcessor.javapublic class LawProcessor extends AbstractProcessor { @Override ...; }}创建业务部门处理类:BusinessProcessor.javapublic class BusinessProcessor extends AbstractProcessor { ...AbstractProcessor businessProcessor = new BusinessProcessor(); AbstractProcessor garbageProcessor
对于所有处理者,我们首先创建一个抽象的处理器类AbstractProcessor,再创建四个处理器的实现类,分别是CEO处理器CeoProcessor、法务部门处理器LawProcessor、业务部门处理器...public abstract class AbstractProcessor { // 责任链中下一个处理节点 private AbstractProcessor nextProcessor...; } } 创建业务部门处理类:BusinessProcessor.java public class BusinessProcessor extends AbstractProcessor {...; } } 创建垃圾邮件处理类:GarbageProcessor.java public class GarbageProcessor extends AbstractProcessor {...AbstractProcessor businessProcessor = new BusinessProcessor(); AbstractProcessor garbageProcessor
文章目录 一、注解处理器 AbstractProcessor 二、使用注解 @AutoService(Processor.class) 标注 注解处理器 三、注解处理器 init 初始化方法 四、注解处理器...Filer 代码生成工具 五、注解处理器 Messager 日志打印工具 六、博客资源 一、注解处理器 AbstractProcessor ---- 上一篇博客 【Android APT】编译时技术...注解处理器 依赖库 , 基于该基础开发 注解处理器 ; 创建 Compiler 注解处理器 , 该类主要作用是生成代码 , 注解处理器类必须继承 javax.annotation.processing.AbstractProcessor...依赖库 ; package kim.hsl.annotation_compiler; import java.util.Set; import javax.annotation.processing.AbstractProcessor...; import javax.lang.model.element.TypeElement; /** * 生成代码的注解处理器 */ public class Compiler extends AbstractProcessor
虚处理器AbstractProcessor 我们首先看一下处理器的API。...每一个处理器都是继承于AbstractProcessor,如下所示: public class MyProcessor extends AbstractProcessor { @Override...import java.util.List; import java.util.Map; import java.util.Set; import javax.annotation.processing.AbstractProcessor...javax.lang.model.util.ElementFilter; import javax.lang.model.util.Elements; public class MyProcessor extends AbstractProcessor...); } set.add("com.robert.processor.Serialize"); return set; } } 我们经常使用的ButterKnife这个框架就很好的使用了AbstractProcessor
AbstractProcessor可以做的事还有很多,我们不可能一一列举。我们最重要的是明白,AbstractProcessor的运行时机、可操作范围和能提供给我们的东西。...可操作范围 AbstractProcessor是在编译期执行的,同时,它通常处于一个纯Java module中,我们无法依赖Android的相关组件。...javaFile.writeTo(filer); } catch (IOException e) { e.printStackTrace(); } } 以上,就是AbstractProcessor
DataBinding Dagger2 ButterKnife EventBus3 DBFlow AndroidAnnotation 使用姿势 1,在android工程中,创建一个java的Module,写一个类继承AbstractProcessor...com.annotation.SingleDelegate", "com.annotation.MultiDelegate" }) public class AnnotationProcessor extends AbstractProcessor...; new MultiDelegateProcessor().process(set, roundEnvironment, this); return true; } } 2,重写AbstractProcessor...extends TypeElement> set, RoundEnvironment roundEnv, AnnotationProcessor abstractProcessor...constructorBuilder, delegate); // 检查是否继承其它接口 builder = processSuperSingleDelegate(abstractProcessor
我们自定义Processor时最常用的是继承AbstractProcessor,首先看一下AbstractProcessor的继承关系: ?...public abstract class AbstractProcessor extends AbstractSessionFactoryProcessor { // 控制器是先调用的AbstractProcessor...context, final ProcessSession session) throws ProcessException; } 这里额外多提一点:NIFI的会话(session)是可以支持事务的,AbstractProcessor...那么接下来,我们在这个MyProcessor.java类中直接继承AbstractProcessor就可以了。...author 酷酷的诚 * @date 2019-06-20 13:59 */ public abstract class AbstractJsonCleaningProcessor extends AbstractProcessor
编译时技术 ( 开发编译时注解 ) 【Android APT】注解处理器 ( 注解标注 与 初始化方法 ) 上一篇博客 【Android APT】注解处理器 ( 注解标注 与 初始化方法 ) 中 开始开发 AbstractProcessor...compileOnly 'com.google.auto.service:auto-service:1.0-rc3' } 二、设置 注解处理器 支持的注解类型 ---- 注解处理器 抽象类 AbstractProcessor...方法中构造一个 Set 集合 , 向其中放置要解析注解的全类名字符串 ; @AutoService(Processor.class) public class Compiler extends AbstractProcessor...types */ String [] value(); } 注意 : 两种方式二选一 , 不能同时存在 ; 三、设置 注解处理器 支持的 Java 版本 ---- 注解处理器 抽象类 AbstractProcessor...getSourceVersion 方法 , 可以获取最新的 Java 版本 ; @AutoService(Processor.class) public class Compiler extends AbstractProcessor
@SupportedAnnotationTypes({"kim.hsl.router_annotation.Route"}) public class RouterProcessor extends AbstractProcessor...Diagnostic.Kind.NOTE 参数 , 第二个参数是要打印的字符串 ; 打印结果输出到 Build 面板中 ; 代码示例 : public class RouterProcessor extends AbstractProcessor...import com.google.auto.service.AutoService; import java.util.Set; import javax.annotation.processing.AbstractProcessor.../ 支持的 Java 版本 @SupportedSourceVersion(SourceVersion.RELEASE_8) public class RouterProcessor extends AbstractProcessor
并在注解处理器中获取该参数 ; 一、注解处理器 接收参数设置 ---- 注解处理器只能是 Java 依赖库 Module , 因为 注解处理器 需要继承 javax.annotation.processing.AbstractProcessor..., 设置注解处理器接收的参数 ; // 注解处理器接收的参数 @SupportedOptions("moduleName") public class RouterProcessor extends AbstractProcessor...java.io.IOException; import java.util.Map; import java.util.Set; import javax.annotation.processing.AbstractProcessor.../ 支持的 Java 版本 @SupportedSourceVersion(SourceVersion.RELEASE_8) public class RouterProcessor extends AbstractProcessor
注解处理器 中检测出来使用注解的 类节点 TypeElement ; 本篇博客中讲解 " 注解处理器 " 后续开发 , 生成 Java 代码 ; 一、注解节点类型 ---- 在 " 注解处理器 " AbstractProcessor...Java 代码 , 不过每行代码都需要自己生成 , 注解处理器 中 , 使用 Filer 对象写出 Java 代码 , 获取 Filer 对象 , 保存在成员字段 Filer mFiler 中 ; AbstractProcessor...注解处理器的 init 方法中 , 调用 ProcessingEnvironment processingEnvironment 参数的 getFiler 方法 , 获取 Filer 对象 ; 在 AbstractProcessor...com.squareup.javapoet.TypeSpec; import java.io.IOException; import java.util.Set; import javax.annotation.processing.AbstractProcessor.../ 支持的 Java 版本 @SupportedSourceVersion(SourceVersion.RELEASE_8) public class RouterProcessor extends AbstractProcessor
四个参数中已经有了三个参数,最后一个宿主参数可以另外传进去 2.具体实现细节 (1)ViewFinder和它的实现类ActivityViewFinder就是实现findViewById的,可以这么写,其实也可以直接写在AbstractProcessor...具体的实现要等后面AbstractProcessor的实现 (3)BindViewField是用来保存标注了BindView的信息的,也就是之前说的三个参数 (4)AnnotatedClass 是用来管理所有...BindViewField变量的 (5)最后着重看一下AbstractProcessor的process的方法实现 @Override public boolean process(Set
() -> { // 1.获取产品信息 new GetProductInfoProcessor(logger, productId).setProcessorCallback(new AbstractProcessor.ProcessorCallbackAdapter.../ 4.送去市场部门评估售价 new GivePriceProcessor(logger, product).setProcessorCallback(new AbstractProcessor.ProcessorCallbackAdapter...singleIO().execute(() -> { new GetBriefInfoProcessor(logger, productId).setProcessorCallback(new AbstractProcessor.ProcessorCallbackAdapter...{ new GetPriceInfoProcessor(logger, product.getPriceId()).setProcessorCallback(new AbstractProcessor.ProcessorCallbackAdapter...-> { new GetRichInfoProcessor(logger, product.getRichId()).setProcessorCallback(new AbstractProcessor.ProcessorCallbackAdapter
编译时注解的核心依赖APT(Annotation Processing Tools)实现,原理是在某些代码元素上(如类型、函数、字段等)添加注解,在编译时编译器会检查AbstractProcessor的子类...Java API已经提供了扫描源码并解析注解的框架,你可以继承AbstractProcessor类来提供实现自己的解析注解逻辑。...AbstractProcessor位于javax.annotation.processing包下,我们自己写processor需要继承它: public class LProcessor extends...AbstractProcessor { @Override public synchronized void init(ProcessingEnvironment processingEnvironment...我们先创建一个java module LProcessor @AutoService(Processor.class) public class LProcessor extends AbstractProcessor
2、编写注解处理器:实现 javax.annotation.processing.AbstractProcessor抽象类,重写相应的方法来处理注解。...{ } 接下来,我们编写一个注解处理器LogProcessor,它会在编译时扫描被@Log注解标记的类,并生成相应的日志类: import javax.annotation.processing.AbstractProcessor...java.io.IOException; import java.io.PrintWriter; import java.util.Set; public class LogProcessor extends AbstractProcessor
领取专属 10元无门槛券
手把手带您无忧上云