ButterKnife源码分析

ButterKnife框架生成了一个辅助类MainActivity_ViewBinding,那么该类是如何生成的呢?答案是:注解处理器在编译阶段生了该辅助类。实现一个注解处理器,需要继承抽象类AbstractProcessor,并重写init,getSupportedAnnotationTypes,getSupportedSourceVersion,getSupportedOptions,process五个方法。在process方法中,会对应用源代码中ButterKnife相关的注解进行扫描并解析其内容,将相关数据存放在一个Map集合中,最后使用Java Poet提供的JavaFile类,将集合中数据串接成字符串生成Java文件

工作流程如下:

  1. 扫描Java代码中所有的ButterKnife注解@Bind, @OnClick, @OnItemClicked等
  2. 当发现类中含有任何一个注解时,ButterKnifeProcessor会生成一个Java类, 名字类似$$ViewBinder,新生成的类实现了ViewBinder接口
  3. ViewBinder类中包含了所有对应的代码,如@Bind注解对应findViewById(), @OnClick对应了view.setOnClickListener()
  4. 当Activity启动ButterKnife.bind(this)执行时,ButterKnife会加载对应的ViewBinder类调用它们的bind()方法。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容