轻松学,Java 中的代理模式及动态代理

本文详细介绍了Java中的代理模式,包括静态代理和动态代理。动态代理通过Proxy类和InvocationHandler接口实现,允许在运行时动态生成接口的实现类,从而在不修改原有代码的情况下增强功能。文中以电影播放和商场售卖为例,清晰地解释了代理模式的工作原理,并探讨了其在AOP(面向切面编程)中的应用。
摘要由CSDN通过智能技术生成

前几天我写了《秒懂,Java 注解 (Annotation)你可以这样学》,因为注解其实算反射技术中的一部分,然后我想了一下,反射技术中还有个常见的概念就是动态代理,于是索性再写一篇关于动态代理的博文好了。

我们先来分析代理这个词。

代理

代理是英文 Proxy 翻译过来的。我们在生活中见到过的代理,大概最常见的就是朋友圈中卖面膜的同学了。

她们从厂家拿货,然后在朋友圈中宣传,然后卖给熟人。

这里写图片描述

按理说,顾客可以直接从厂家购买产品,但是现实生活中,很少有这样的销售模式。一般都是厂家委托给代理商进行销售,顾客跟代理商打交道,而不直接与产品实际生产者进行关联。

所以,代理就有一种中间人的味道。

接下来,我们说说软件中的代理模式。

代理模式

代理模式是面向对象编程中比较常见的设计模式。

代理模式是一种结构型设计模式,其目的是为其他对象提供一种代理以控制对该对象的访问。代理对象可提供额外的功能,如权限控制、日志记录、性能监控等,同时还可以对目标对象进行保护,隐藏目标对象的具体实现细节。 在Java代理模式主要有两种类型:静态代理动态代理静态代理是通过手动编写代理类来实现的。代理类和目标类实现相同的接口,并包含一个对目标对象的引用。在代理类的方法,可以在调用目标对象的方法之前或之后添加额外的逻辑。静态代理的优点是简单易懂,缺点是需要手动编写代理类,如果接口的方法较多,需要编写大量重复的代码。 动态代理是在运行时生成代理对象,无需手动编写代理类。Java提供了两种动态代理的方式:基于接口的代理(JDK动态代理)和基于类的代理(CGLIB动态代理)。 JDK动态代理通过反射机制在运行时生成代理对象,代理对象实现了目标接口,并重写了接口的方法。在代理方法,可以通过调用InvocationHandler接口的invoke方法来添加额外逻辑。JDK动态代理的优点是无需手动编写代理类,缺点是只能代理实现了接口的目标对象。 CGLIB动态代理通过继承目标类和生成代理子类的方式实现。代理子类重写了目标类的方法,并可以在调用目标方法之前或之后添加额外逻辑。CGLIB动态代理的优点是可以代理没有实现接口的目标对象,缺点是生成代理对象的过程相对较慢。 总之,代理模式可以帮助我们在不修改已有代码的情况下为对象添加额外的功能。静态代理需要手动编写代理类,而动态代理则可以在运行时生成代理对象,为我们省去了大量的重复代码。根据需求选择适用的代理方式可以提高代码的可维护性和灵活性。
评论 85
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

frank909

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值