【IOC 控制反转】Android 布局依赖注入 ( 布局依赖注入步骤 | 布局依赖注入代码示例 )
文章目录
- 总结
- 一、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 布局依赖注入 ( 布局依赖注入步骤 | 布局依赖注入代码示例 )相关推荐
- 【IOC 控制反转】Android 事件依赖注入 ( 事件依赖注入代码示例 )
文章目录 总结 一.Android 事件依赖注入示例 1.创建依赖注入库 2.声明注解 (1).修饰注解的注解 (2).修饰方法的注解 3.Activity 基类 4.动态代理类调用处理程序 5.依赖 ...
- 【IOC 控制反转】Android 视图依赖注入 ( 视图依赖注入步骤 | 视图依赖注入代码示例 )
文章目录 总结 一.Android 视图依赖注入步骤 二.Android 布局依赖注入示例 1.创建依赖注入库 2.声明注解 3.Activity 基类 4.依赖注入工具类 5.客户端 Activit ...
- 【IOC 控制反转】Android 事件依赖注入 ( 事件依赖注入具体的操作细节 | 创建 事件监听器 对应的 动态代理 | 动态代理的数据准备 | 创建调用处理程序 | 创建动态代理实例对象 )
文章目录 前言 一.创建 事件监听器 对应的 动态代理 二.动态代理 数据准备 三.动态代理 调用处理程序 四.动态代理 实例对象创建 前言 Android 依赖注入的核心就是通过反射获取 类 / 方 ...
- 【IOC 控制反转】Android 事件依赖注入 ( 事件依赖注入具体的操作细节 | 获取要注入事件的 View 对象 | 通过反射获取 View 组件的事件设置方法 )
文章目录 前言 一.获取要注入事件的 View 对象 二.通过反射获取 View 组件的事件设置方法并执行 前言 Android 依赖注入的核心就是通过反射获取 类 / 方法 / 字段 上的注解 , ...
- 【IOC 控制反转】Android 事件依赖注入 ( 事件依赖注入具体的操作细节 | 获取 Activity 中的所有方法 | 获取方法上的注解 | 获取注解上的注解 | 通过注解属性获取事件信息 )
文章目录 前言 一.获取 Activity 中的所有方法 二.获取方法上的注解 三.获取注解上的注解 四.通过注解属性获取相关事件信息 前言 Android 依赖注入的核心就是通过反射获取 类 / 方 ...
- IOC控制反转(依赖注入思想)
IOC控制反转(依赖注入思想) 获取map 类型的 request session application 的方法: 实现RequestAware,SessionAware,ApplicationAw ...
- 【Java从0到架构师】Spring - IoC 控制反转、DI 依赖注入
IoC 控制反转.DI 依赖注入 Spring 简介 Spring 基本使用 - IoC 容器 依赖注入 (Dependency Injection) 基于 setter 的注入 - 自定义对象 be ...
- 什么是IOC(控制反转)、DI(依赖注入)举个形象的例子通俗易懂
更多免费教学文章请关注这里 学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清 ...
- Spring-初识Spring框架-IOC控制反转(DI依赖注入)
---恢复内容开始--- IOC :控制反转 (DI:依赖注入) 使用ioc模式开发 实体类必须有无参构造方法 1.搭建Spring环境 下载jar http://maven.springframew ...
最新文章
- 详解:开通IIS的FTP服务器并添加多个FTP用户
- 【开卷故意】记录一次高并发下的死锁解决思考过程
- SpringDataJpa报错: Table 'XX.hibernate_sequence' doesn't exist
- P2764 最小路径覆盖问题(网络流)
- Node.js(爱前端) 一
- 云题库进入其它章节的办法 0925
- Oracle ADG备库SYSAUX数据文件坏块恢复处理(ORA-00600,ORA-10567,ORA-10564......
- android cygwin离线安装包,Cygwin配合NDK开发Android程序
- BZOJ 1492 货币兑换Cash
- 三包围结构的字是什么样的_四张图说清楷书结构技巧,学硬笔书法的有福了
- 离职后前公司老大叫我回去帮忙,怎么委婉拒绝?
- 年龄估计:Ordinal Regression
- 使用Hibernate中save方法时由于设置的id的增长方式为assigned报错处理和
- 把一个人的特点写具体作文_把一个人的特点写具体
- [编译原理读书笔记][第4章 语法分析]
- 8×8二维载荷谱编制
- [易飞]取消库位规格书
- 哈尔滨理工大学第七届程序设计竞赛决赛(网络赛-高年级组)G - 幼儿园战争...
- glusterfs集群安装
- Deep Learning for Massive MIMO CSI Feedback-学习笔记
热门文章
- 技术人的标准——简历模板
- 布局技巧:使用ViewStub
- 15 redis-分布式锁
- 记录MNIST采用卷积方式实现与理解
- Mysql存储过程中的事务回滚
- linux下使用DBCA(database configuration assistant)创建oracle数据库
- codevs地鼠游戏(贪心)
- codetyphon, Lazarus+FreePascal+Tools+Free Components packages+Free Libraries
- sql语句转linq的一个小工具
- Internet Explorer 8 Beta 2十大看点