Android 插件化——Java动态代理

本文介绍了Java动态代理的概念、应用场景,以及如何实现动态代理。动态代理通过在运行时创建代理类,提供了更好的灵活性。文章详细阐述了动态代理的四个核心元素:接口、目标对象、织入器和InvocationHandler,并给出了一个实际的实现过程,包括创建代理对象、配置代理类以及源码分析,特别提到了在Retrofit框架中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近本着不求甚解的态度重温了一下主流框架的源码,加上之前的笔记,所以趁热打铁的总结一下,学习框架或开发框架所必备的基础知识:

1、简介

  • 代理的理解:代理是一种软件设计模式,通过代理的方式实现程序的扩展、修改和隐藏的等,具体上讲代理这种设计模式是通过不直接访问被代理对象的方式,而访问被代理对象的方法
  • 适应场景
  1. 设计模式中有一个设计原则是开闭原则,是说对修改关闭对扩展开放,那么这时我们就可以通过代理对类进行增强;
  2. 在使用和开发框架时,框架本身并不能提前知道各个业务方要调用哪些接口的哪些方法 ,那么这个时候,就可用通过动态代理的方式来建立一个中间人给客户端使用,也方便框架进行搭建逻辑,某种程度上也是客户端代码和框架松耦合的一种表现,如Retrofit;
  3. Spring的AOP机制就是采用动态代理的机制来实现切面编程,即针对某一具体的操作拦截过程执行统一的处理回调,在埋点操作中使用
  • 动态代理:在运行期动态创建代理类,相比静态代理有会更好的灵活性;

以上是对动态代理的简单介绍,对于AOP使用代理机制会在下一篇文章中进行详细介绍,本文主要将最基本的Java动态代理的实现

2、实现动态代理

  • 动态代理实现AOP需要4个角色:
  1. 被代理类的接口:通过此接口作为代理的入口
  2. 被代理的类:AOP里所说的目标对象,也是接口真正的实现类,处理具体的业务逻辑
  3. 织入器:使用接口反射机制生成一个代理类,在这个代理类中织入代码
  4. InvocationHandler切面:包含了Advice和Pointcut,内部保存真实的对象,在增加或改变部分逻辑后再执行原来操作

上面是动态代理的四个元素,下面一个一个介绍并实现过程。

  • 被代理类的接口

   任意定义一个接口,此接口就问要代理的接口,将需要在运行时动态干涉的方法定义在接口内

/**
* 代理的接口
*/
interface Study {
    fun studyEnglish()
    fun studyMath()
}
  • 被代理的类

实现了被代理接口的类

/**
* 实现的代理类
*/
class StudyImp : Study {
    override fun studyEng
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值