type
status
date
slug
summary
tags
category
password
icon

⽤反射实现 ButterKnife

  • 创建 @BindView 注解
  • ⽤反射获取 Field[],然后找到加了 @BindView 的字段,⾃动调⽤ findViewById() 来绑定对象

依赖注⼊吗?

  • 什么是依赖注⼊:把依赖的决定权交给外部,即依赖注⼊
  • Dagger:外部的依赖图来决定依赖的值,对象⾃⼰只负责「索要」,⽽不负责指定值,所以Dagger 是依赖注⼊
  • ButterKnife:⾃⼰决定依赖的的获取,只把执⾏过程交给 ButterKnife,所以只是⼀个视图绑定库,⽽不是依赖注⼊

Annotation Processing

  • 理解 Annotation Processing 的原理:编译过程中读源码,然后⽣成新的代码⽂件,再放在⼀起进⾏编译
  • 例如:
  • Annotation Processing 的⽬的:⾃动⽣成这部分代码

⽤ Annotation Processing 实现 ButterKnife

💡
需要通过注解在编译之前处理代码,就需要使用到在 app/build.gradle 中使用到 annotationProcessor 这个依赖参数,依赖的是一个纯 java 的项目,在其中完成如下
  • Annotation Processing ⽤法:
    • resources/META-INF/services/javax.annotation.processing.Processor
    • 继承 AbstractProcessor
    • 重写 getSupportedAnnotationTypes() 和 process()
      • annotaions: 程序中出现的已注册的 Annotations;roundEnv:各个 java ⽂件
    • 依赖:annotationProcessor
    • 先测试⽣成 java ⽂件的功能:
      • javapoet
      • 代码:
    • ⾃动⽣成代码:
      • 需要把 Annotation 单独拆成⼀个 java lib module,被主项⽬和 processor 分别依赖
        • 还需要⼀个 lib module,依赖 annotation,把 bind 那些东⻄写在这⾥。主项⽬依赖 lib,lib 依赖 annotations。最终主项⽬中有两个依赖:lib 和 processor
      泛型类型的创建组件化|插件化
      Loading...
      shuouyang
      shuouyang
      android开发 ReactNative开发 小程序开发
      最新发布
      AOSP 环境搭建
      2025-3-29
      View 绘制流程-源码解析
      2025-3-12
      HTTP
      2025-3-4
      JVM 虚拟机
      2025-2-28
      蓝牙-BLE-基础
      2025-2-28
      从 OkHttp 的原理来看 HTTP
      2025-2-19
      公告
      🎉热点信息🎉
      --- 1 ---
      Jet Brains 推出新的跨平台支持 Kotlin MultiPlatform
      --- 2 ---
      新的小巧便捷的依赖注入框架 Koin
      --- 3 ---
      新一代 API 查询语言 GraphQL