六、设计模式-6.2、代理模式

6.2、代理模式

6.2.1、什么是代理?为什么要用动态代理?

答:
在Java中,代理是一种设计模式,其目的是在不修改原始对象的情况下,通过创建一个中间代理对象来控制对原始对象的访问。

动态代理是一种特殊类型的代理,它不需要预先编写代理类,而是在运行时动态生成代理对象Java中的动态代理是通过反射机制实现的

使用动态代理的主要原因是在不改变原始对象的情况下,提供额外的功能或行为。比如,可以在方法执行前后进行日志记录、权限管理、事务处理等。此外,动态代理还可以实现远程代理,将方法调用转发到远程服务器上的对象。

动态代理的好处是可以在运行时动态地增加、删除和修改代理类的行为,使得代码更加灵活和可扩展。它也能够减少重复的代码和提高代码的可重用性。

6.2.2、JDK动态代理为什么只能代理有接口的类?

答:
有接口的类就是实现了接口的类,JDK动态代理只能代理有接口的类,是因为JDK动态代理是基于接口实现的

JDK动态代理是通过创建一个实现代理接口的代理类,并通过反射调用被代理对象的方法。在代理类中,每个被代理的方法都会被重写,并在方法中调用InvocationHandler的invoke方法,实现了对被代理对象方法的增强

由于Java是单继承的语言,一个类只能继承一个父类,但可以实现多个接口。因此,JDK动态代理选择通过创建代理接口的实现类来实现代理的功能。代理对象可以实现多个接口,通过实现这些接口来实现代理对象和被代理对象的方法一一对应。

而对于没有实现接口的类,JDK动态代理无法实现以接口为基础的代理机制,因为没有接口可以作为代理类的基础。针对没有实现接口的类,可以使用其他代理框架,如CGLib,来实现动态代理。CGLib可以通过动态生成字节码,直接继承被代理类,从而实现对非接口类的代理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值