文章目录

  • 总结
  • 一、Android 布局依赖注入步骤
  • 二、Android 布局依赖注入示例
    • 1、创建依赖注入库
    • 2、声明注解
    • 3、Activity 基类
    • 4、依赖注入工具类
    • 5、客户端 Activity
  • 三、博客源码

总结

Android 依赖注入的核心就是通过反射获取 类 / 方法 / 字段 上的注解 , 以及注解属性 ; 在 Activity 基类中 , 获取该注解 以及 注解属性 , 进行相关操作 ;

一、Android 布局依赖注入步骤


正常控制 : Android 中加载布局操作 , 由自己的 Activity 类加载布局 ;

控制反转 : Android 中加载布局操作 , 由 第三者 加载 Activity 布局 ;

Android 布局依赖注入步骤 :

  • ① 客户端 Activity : 定义 MainActivity , 继承 BaseActivity ;
  • ② IOC 库中的 Activity 父类 : 定义 BaseActivity , 在 BaseActivity 中的 onCreate 方法中 , 处理依赖注入相关逻辑 ;
  • ③ 依赖注入逻辑 : 获取 Activity 类 , 并使用反射获取类上的注解属性 ( 布局文件 ID ) , 为 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.TYPE)   // 该注解作用于类上
@Retention(RetentionPolicy.RUNTIME)    // 注解保留到运行时
public @interface ContentView {int value();    // 接收 int 类型值
}

@Target(ElementType.TYPE) 表示该注解作用与类上 ;

@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 {@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 在此处注入布局//      此处传入的 Activity 参数是 MainActivity 子类对象InjectUtils.inject(this);}
}

4、依赖注入工具类

package kim.hsl.ioc_lib;import android.app.Activity;public class InjectUtils {/*** 为 Activity 注入布局* @param activity  该 Activity 是继承了 BaseActivity 的 MainActivity 实例对象*/public static void inject(Activity activity) {// 获取 Class 字节码对象Class<? extends Activity> clazz = activity.getClass();// 反射获取类上的注解ContentView contentView = clazz.getAnnotation(ContentView.class);// 获取注解中的布局 IDint layoutId = contentView.value();// 为 Activity 设置显示的布局activity.setContentView(layoutId);}
}

5、客户端 Activity

package kim.hsl.ioc_demo;import kim.hsl.ioc_lib.BaseActivity;
import kim.hsl.ioc_lib.ContentView;/*** 当该 MainActivity 启动时 , 调用 BaseActivity 的 onCreate 方法*      在 BaseActivity 的 onCreate 方法中注入布局*/
@ContentView(R.layout.activity_main)
public class MainActivity extends BaseActivity {}

运行结果 :

三、博客源码


GitHub : https://github.com/han1202012/IOC_Demo

CSDN : https://download.csdn.net/download/han1202012/24010683

【IOC 控制反转】Android 布局依赖注入 ( 布局依赖注入步骤 | 布局依赖注入代码示例 )相关推荐

  1. 【IOC 控制反转】Android 事件依赖注入 ( 事件依赖注入代码示例 )

    文章目录 总结 一.Android 事件依赖注入示例 1.创建依赖注入库 2.声明注解 (1).修饰注解的注解 (2).修饰方法的注解 3.Activity 基类 4.动态代理类调用处理程序 5.依赖 ...

  2. 【IOC 控制反转】Android 视图依赖注入 ( 视图依赖注入步骤 | 视图依赖注入代码示例 )

    文章目录 总结 一.Android 视图依赖注入步骤 二.Android 布局依赖注入示例 1.创建依赖注入库 2.声明注解 3.Activity 基类 4.依赖注入工具类 5.客户端 Activit ...

  3. 【IOC 控制反转】Android 事件依赖注入 ( 事件依赖注入具体的操作细节 | 创建 事件监听器 对应的 动态代理 | 动态代理的数据准备 | 创建调用处理程序 | 创建动态代理实例对象 )

    文章目录 前言 一.创建 事件监听器 对应的 动态代理 二.动态代理 数据准备 三.动态代理 调用处理程序 四.动态代理 实例对象创建 前言 Android 依赖注入的核心就是通过反射获取 类 / 方 ...

  4. 【IOC 控制反转】Android 事件依赖注入 ( 事件依赖注入具体的操作细节 | 获取要注入事件的 View 对象 | 通过反射获取 View 组件的事件设置方法 )

    文章目录 前言 一.获取要注入事件的 View 对象 二.通过反射获取 View 组件的事件设置方法并执行 前言 Android 依赖注入的核心就是通过反射获取 类 / 方法 / 字段 上的注解 , ...

  5. 【IOC 控制反转】Android 事件依赖注入 ( 事件依赖注入具体的操作细节 | 获取 Activity 中的所有方法 | 获取方法上的注解 | 获取注解上的注解 | 通过注解属性获取事件信息 )

    文章目录 前言 一.获取 Activity 中的所有方法 二.获取方法上的注解 三.获取注解上的注解 四.通过注解属性获取相关事件信息 前言 Android 依赖注入的核心就是通过反射获取 类 / 方 ...

  6. IOC控制反转(依赖注入思想)

    IOC控制反转(依赖注入思想) 获取map 类型的 request session application 的方法: 实现RequestAware,SessionAware,ApplicationAw ...

  7. 【Java从0到架构师】Spring - IoC 控制反转、DI 依赖注入

    IoC 控制反转.DI 依赖注入 Spring 简介 Spring 基本使用 - IoC 容器 依赖注入 (Dependency Injection) 基于 setter 的注入 - 自定义对象 be ...

  8. 什么是IOC(控制反转)、DI(依赖注入)举个形象的例子通俗易懂

    更多免费教学文章请关注这里 学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清 ...

  9. Spring-初识Spring框架-IOC控制反转(DI依赖注入)

    ---恢复内容开始--- IOC :控制反转 (DI:依赖注入) 使用ioc模式开发 实体类必须有无参构造方法 1.搭建Spring环境 下载jar http://maven.springframew ...

最新文章

  1. 详解:开通IIS的FTP服务器并添加多个FTP用户
  2. 【开卷故意】记录一次高并发下的死锁解决思考过程
  3. SpringDataJpa报错: Table 'XX.hibernate_sequence' doesn't exist
  4. P2764 最小路径覆盖问题(网络流)
  5. Node.js(爱前端) 一
  6. 云题库进入其它章节的办法 0925
  7. Oracle ADG备库SYSAUX数据文件坏块恢复处理(ORA-00600,ORA-10567,ORA-10564......
  8. android cygwin离线安装包,Cygwin配合NDK开发Android程序
  9. BZOJ 1492 货币兑换Cash
  10. 三包围结构的字是什么样的_四张图说清楷书结构技巧,学硬笔书法的有福了
  11. 离职后前公司老大叫我回去帮忙,怎么委婉拒绝?
  12. 年龄估计:Ordinal Regression
  13. 使用Hibernate中save方法时由于设置的id的增长方式为assigned报错处理和
  14. 把一个人的特点写具体作文_把一个人的特点写具体
  15. [编译原理读书笔记][第4章 语法分析]
  16. 8×8二维载荷谱编制
  17. [易飞]取消库位规格书
  18. 哈尔滨理工大学第七届程序设计竞赛决赛(网络赛-高年级组)G - 幼儿园战争...
  19. glusterfs集群安装
  20. Deep Learning for Massive MIMO CSI Feedback-学习笔记

热门文章

  1. 技术人的标准——简历模板
  2. 布局技巧:使用ViewStub
  3. 15 redis-分布式锁
  4. 记录MNIST采用卷积方式实现与理解
  5. Mysql存储过程中的事务回滚
  6. linux下使用DBCA(database configuration assistant)创建oracle数据库
  7. codevs地鼠游戏(贪心)
  8. codetyphon, Lazarus+FreePascal+Tools+Free Components packages+Free Libraries
  9. sql语句转linq的一个小工具
  10. Internet Explorer 8 Beta 2十大看点