文章目录
总结
一、Android 视图依赖注入步骤
二、Android 布局依赖注入示例
1、创建依赖注入库
2、声明注解
3、Activity 基类
4、依赖注入工具类
5、客户端 Activity
三、博客源码
总结
Android 依赖注入的核心就是通过反射获取 类 / 方法 / 字段 上的注解 , 以及注解属性 ; 在 Activity 基类中 , 获取该注解 以及 注解属性 , 进行相关操作 ;
一、Android 视图依赖注入步骤
Android 视图依赖注入步骤 :
① 声明注解 : 声明视图注入注解 BindBiew ;
② 客户端 Activity : 定义 MainActivity , 继承 BaseActivity , 在属性字段上使用 @BindBiew 注解注入视图 ;
③ IOC 库中的 Activity 父类 : 定义 BaseActivity , 在 BaseActivity 中的 onCreate 方法中 , 处理依赖注入相关逻辑 ;
④ 依赖注入逻辑 : 获取 Activity 类 , 并使用反射获取类中的所有属性字段 , 获取所有的 @BindBiew 注解 , 如果找到该注解 , 执行 findViewById 获取视图组件对象 , 并赋值给 Activity 中的属性字段 ;
二、Android 布局依赖注入示例
1、创建依赖注入库
首先在 Android 应用中 , 创建一个 " Android Library " ,
设置主应用依赖该 Android 依赖库 :
dependencies { implementation project(path: ':ioc_lib') }
2、声明注解
创建如下注解 :
package kim.hsl.ioc_lib; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 自定义注解 * 用于依赖注入视图 */ @Target(ElementType.FIELD) // 该注解作用于字段上 @Retention(RetentionPolicy.RUNTIME) // 注解保留到运行时 public @interface BindView { int value(); // 接收 int 类型值 }
@Target(ElementType.FIELD) 表示该注解作用于属性字段上 ;
@Retention(RetentionPolicy.SOURCE) 注解保留到源码期 , Java 源码时期 RetentionPolicy.SOURCE -> Class 字节码时期 RetentionPolicy.CLASS -> JVM 运行时时期 RetentionPolicy.RUNTIME ;
int value() 表示该注解接收一个 int 类型的值 ;
3、Activity 基类
package kim.hsl.ioc_lib; import android.app.Activity; import android.os.Bundle; import androidx.annotation.Nullable; public class BaseActivity extends Activity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 在此处注入布局 // 此处传入的 Activity 参数是 MainActivity 子类对象 InjectUtils.inject(this); } }