java动态代理

本文介绍了Java动态代理,探讨了代理模式、静态代理和动态代理的概念。通过实例展示了静态代理的实现,强调其冗余和不易维护的缺点。接着,解释了Java动态代理的工作原理,允许在运行时动态创建接口的实例,实现对目标对象功能的扩展,而无需预先定义代理类。
摘要由CSDN通过智能技术生成

前言

为什么要学Java动态代理呢,原因是再看cc1链条的时候,ysoserial中使用的并不是TransformedMap而是LazyMap链条,ysoserial的作者使用了对象代理的方式,所以才去了解了一下Java的动态代理,首先要明白代理是什么,然后既然说到动态代理,那么就得先来了解一下静态代理做对比。下面会从代理模式,静态代理,动态代理这三块儿来了解

代理模式

代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。
举个例子,比如说张三的老婆经常家暴张三,张三去法院告他老婆要求离婚,一审由于证据不足败诉,而这个时候呢,张三花钱请来了律师来替他上诉,律师从引用法律条文和人伦道德方面来证明 打人是不对的,促使离婚的请求。
这里把张三比作一个类,然后呢想要引用律师的法律条文和人伦道德,让律师替我们完成上诉,这里的律师就是我们的实现类,实现了法律条文和人伦道德,这就是一个简单的代理模式

静态代理

这种代理方式需要代理对象和目标对象实现一样的接口。
优点:可以在不修改目标对象的前提下扩展目标对象的功能。
缺点:
冗余。由于代理对象要实现与目标对象一致的接口,会产生过多的代理类。
不易维护。一旦接口增加方法,目标对象与代理对象都要进行修改。
下面的代码就以张三的例子来完成静态代理

package org.example.cc;

public class DaiLiDemo1 {
   

}

interface Speaker{
   
    public void speak();
}
class ZhangSan implements Speaker{
   
    @Override
    public void speak(){
   
        System.out.println("老婆打人");
    }
}
class ZhangSanLawyer implements Speaker{
   
    private ZhangSan zhangSan = new ZhangSan();
    @Override
    public void speak(){
   
        System.out.println
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值