当前位置: 首页 > news >正文

Retrofit框架分析(二):注解、反射以及动态代理,Retrofit框架动态代理的源码分析

Retrofit框架分析(二):反射、泛型以及动态代理,手写Retrofit框架

  1. 注解是什么,为什么出现

  2. 反射是什么,为什么出现

    2.1. 使用反射实现ButterKnife的一个小功能:为TextView赋值

  3. 动态代理,和Retrofit有什么关系?

  4. Retrofit框架动态代理的源码分析


一、注解是什么,为什么出现

在注解出现之前,我们进行一些信息配置,都是采用XML 配置文件,这种比较繁琐、容易与代码不同步。注解出现以后,才来的的好处:

  1. ​简化配置​
  2. ​减少样板代码​
  3. ​运行时动态处理​

注解是 Java 5 引入的一种​​元数据(metadata)​​机制,用于为代码元素(类、方法、字段等)添加结构
化信息。这些信息本身不直接影响代码逻辑,但可以被编译器、开发工具或运行时框架读取和处理。

注解单独本身没有什么作用,需要搭配其他功能来使用,比如反射。


二、反射是什么,为什么出现

一般情况下,我们使用某个类时必定知道它是什么类是用来做什么的,并且能够获得此类的引用。于是我们直接对这个类进行实例化,之后使用这个类对象进行操作。

String name = new String()

反射则是一开始并不知道我要初始化的类对象是什么自然也无法使用 new 关键字来创建对象了。这时候,我们使用 JDK提供的反射 API进行反射调用。反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。是Java被视为动态语言的关键。

​类似于现实生活​​:

  • ​X光机​​:不拆开物体即可观察内部结构(反射不修改代码即可分析类)。
  • ​镜子​​:通过镜像观察自身(反射对象获取类的元数据)。

为什么要学习反射,一方面是主流的框架(如Retrofit、ButterKnife)底层大量依赖反射,如果不了解,那么我们无法知道他们是如何实现的;一方面,如果我们要写出可移植性的代码,给别人用的代码,那么反射是我们必须掌握的知识。

2.1 使用反射实现ButterKnife的一个小功能:为TextView赋值

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyId {int value();
}

@Retention(RetentionPolicy.RUNTIME):必须保留到运行时才能通过反射获取。
@Target(ElementType.FIELD):使用在变量上。

@MyId(R.id.tv_myid)
TextView tvMyid;
@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_back);//反射进行赋值。ButtId.init(this);tvMyid.setText("您年的是否啊手动阀手动阀士大夫阿斯蒂芬阿斯蒂芬阿斯蒂芬
http://www.xdnf.cn/news/106741.html

相关文章:

  • bert学习
  • AIGC的伦理困境:机器生成内容是否该被监管?
  • 动态脚本引擎QLExpress,实现各种复杂的业务规则
  • 深度学习驱动的车牌识别:技术演进与未来挑战
  • 创建第一个Spring Boot项目
  • pytorch(gpu版本安装)
  • Javase 基础入门 —— 04 继承
  • 数据结构与算法学习笔记(Acwing提高课)----动态规划·数字三角形
  • openssh-10.0p1用于修复CVE-2025-26465、CVE-2025-26466
  • java springBoot 整合 扣子cozeAI 智能体 对话
  • AI 人工智能模型:从理论到实践的深度解析⚡YQW · Studio ⚡【Deepseek】【Chat GPT】
  • python函数与模块
  • PyCharm 链接 Podman Desktop 的 podman-machine-default Linux 虚拟环境
  • YOLO学习笔记 | 从YOLOv5到YOLOv11:技术演进与核心改进
  • JVM学习笔记
  • Spark论述及其作用
  • 五、实现隐藏(Hiding the Implementation)
  • 记录一次OGG进程abended,报错OGG-01431、OGG-01003、OGG-01151、OGG-01296问题的处理
  • Windows 同步技术-一次性初始化
  • Discuz!与DeepSeek的AI融合:打造智能网址导航新体验——以“虎跃办公”为例
  • 15.FineReport动态展示需要的列
  • 运维案例:让服务器稳定运行,守护业务不掉线!
  • 块压缩与图片压缩优缺点对比
  • 高可靠性厚铜PCB生产的五大关键设备
  • leetcode刷题——判断对称二叉树(C语言版)
  • 知识链(Chain-of-Knowledge):通过对异构来源的动态知识适配实现大语言模型的知识落地
  • 数据通信学习笔记之OSPF的基础术语-距离矢量路由协议
  • 概率dp总结
  • 精准识别违规登录:Windows事件ID 4624全维度分析手册
  • 解决AWS中ELB的目标群组中出现不正常数