文章目录

  • 总结
  • 一、Android 事件设置三要素
  • 二、修饰注解的注解
  • 三、Android 事件依赖注入步骤

总结

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

一、Android 事件设置三要素


根据以下设置组件点击事件的代码 , 分析事件注入的要素 :

textView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {}
});
  • 点击事件 : 设置点击事件 , 需要调用 View.setOnClickListener 方法进行设置 ;

  • 监听器类型 : 设置监听器类型 , 一般是 View.OnClickListener ;

  • 事件触发回调方法 : 事件触发后的回调方法 , 原型为 public void onClick(View v) ;

为了兼容各种事件注入 , 如长按事件 , 上述事件设置三要素分别是

  • 点击事件 : View.setOnLongClickListener
  • 监听器类型 : View.OnLongClickListener
  • 事件触发回调方法 : public boolean onLongClick(View v)
textView.setOnLongClickListener(new View.OnLongClickListener() {@Overridepublic boolean onLongClick(View v) {return false;}

如果要兼容各种不同的事件 , 就需要定义不同的注解 , 这里引入一个修饰注解的注解 , 为不同的时间注入注解进行配置 ;

二、修饰注解的注解


在 Java Web 开发中 , 经常使用注解进行相关配置 , 如 Spring ;

配置 EventBase 注解 , 用于修改事件注入的注解 , 点击事件与长按事件 , 都要使用下面的 EventBase 注解进行修饰 , 只是事件设置 333 要素设置不同 ;

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.ANNOTATION_TYPE)   // 该注解作用于注解上
@Retention(RetentionPolicy.RUNTIME)    // 注解保留到运行时
public @interface EventBase {/*** 设置事件监听的方法* @return*/String listenerSetter();/*** 设置监听器类型* @return*/Class<?> listenerType();/*** 事件触发后的回调方法* @return*/String callbackMethod();
}

使用上述注解修饰 OnClick 注解 :

package kim.hsl.ioc_lib;import android.view.View;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;/*** 自定义注解*  用于依赖注入视图*/
@Target(ElementType.METHOD)   // 该注解作用于方法上
@Retention(RetentionPolicy.RUNTIME)    // 注解保留到运行时
@EventBase(listenerSetter = "setOnClickListener",listenerType = View.OnClickListener.class,callbackMethod = "onClick")
public @interface OnClick {int[] value();    // 接收 int 类型数组
}

三、Android 事件依赖注入步骤


Android 事件依赖注入步骤 :

  • ① 声明注解 : 声明视图注入注解 OnClick ;
  • ② 声明修饰注解的注解 : 声明修饰注解的注解 EventBase , 用于配置事件 333 要素 ;
  • ② 客户端 Activity : 定义 MainActivity , 继承 BaseActivity , 在方法上使用 @OnClick 注解注入视图点击事件 ;
  • ③ IOC 库中的 Activity 父类 : 定义 BaseActivity , 在 BaseActivity 中的 onCreate 方法中 , 处理依赖注入相关逻辑 ;
  • ④ 依赖注入逻辑 : 获取 Activity 类 , 并使用反射获取类中的所有属性字段 , 获取所有的 @OnClick@EventBase注解 , 如果找到该注解 , 执行 setOnClickListener 设置视图组件对象的点击方法 ;

【IOC 控制反转】Android 事件依赖注入 ( 事件三要素 | 修饰注解的注解 | 事件依赖注入步骤 )相关推荐

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

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

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

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

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

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

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

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

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

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

  6. 【IOC 控制反转】Android 布局依赖注入 ( 布局依赖注入步骤 | 布局依赖注入代码示例 )

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

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

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

  8. ioc控制反转_深入理解依赖注入(DI)和控制反转(IOC)

    转载本文务必须注明出处.微信号(Yemeir_com).以及添加原文链接. 为什么要使用依赖注入 使用依赖注入(DI)可以使控制者与抽象实现者松耦合,便于单元测试.通过控制反转(IOC)的设计原理来减 ...

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

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

最新文章

  1. 用vector写结构体
  2. 不同浏览器input file样式不一样
  3. 手桌面上没有计算机,手把手教你电脑桌面图标都不见了怎么办
  4. C++ vector和stack入门习题(采用排序)
  5. 车型数据导入excel
  6. python常用marker
  7. win10 往vmware 黑苹果系统无法拖拽复制问题
  8. WINVNC源码分析(四)-vnchooks
  9. iPhone预计移除SIM卡槽,用户需通过eSIM激活网络
  10. 实战开发:新手小白如何用C++制作经典网游DNF
  11. 二维数组作为参数传递问题
  12. 如何实现简单的随机点名
  13. 2023年华中科技大学土地资源管理考研上岸前辈备考经验
  14. vuex是干什么的?
  15. 提交工程到git的分支上
  16. Focus和SetFocus、GetFocus、LoseFocus
  17. 实验七 函数程序设计 张玉生《C语言程序设计实训教程》双色版 配套实验书答案 (纯手打, 仅供参考)
  18. SpringBoot定时任务简单应用
  19. 【学习笔记】SpringMVC—@RequestMapping注解
  20. 云枢认证考试_云枢互动下载

热门文章

  1. LeetCode 213. 打家劫舍 II
  2. 铁乐学python_Day40_进程池
  3. mysql 事务处理
  4. jzoj C组 2017.1.19 比赛
  5. INotifyPropertyChanged 接口 CallerMemberName属性
  6. 一些非常实用的JSON 教程
  7. 研磨设计模式之 单例模式-3
  8. BeautifulSoup库的使用
  9. 微信小程序--后台交互/wx.request({})方法/渲染页面方法 解析
  10. TypeScript 素描 - 函数