动态代理的思想分析

1.侵入式修改

源代码写完后,想要在源代码的基础上加入其他功能

图片

直接在源代码中写入,被称为侵入式修改,工作中它一般会导致屎山代码崩溃

图片

2.代理

图片

(1).程序为什么需要代理:

明星的职责只是表演,如果准备话筒和收钱的事都要明星来做他们会嫌事太多了,这时候就需要中介公司提供经纪人来完成准备工作

为了避免加功能时代码崩塌,会创建一个代理,让代理来实现新功能的同时,调用老代码中的老功能。以此实现代码的更新。

无侵入式的给代码增加新的功能

(2).代码长什么样:

如果有人找明星要求他表演,明星会让他找经纪人谈,如果要求唱歌,经纪人就做唱歌的准备,并且让明星唱歌

老代码有什么方法想被代理,代理就要有相应的方法

(3).程序怎么知道有哪些方法想被代理

创建一个接口,接口里面写入要实现的对象,经纪人和明星都要实现同一个接口

图片

3.newProxyInstance(创建代理对象)

图片

`
public static Star createProxy(Bigstar bigstar){ //创建一个方法,返回值是代理(star)

Star star=new newProxyInstance();
return star;

}
`

(1).参数一

类加载器:Java在运行的时候,将字节码文件加载到内存当中
ProxyUtil(字节码文件名字), ProxyUtil.class(找到谁将当前字节码文件加载到内存的),
ProxyUtil.class.getClassLoader(让加载当前字节码文件的类加载器,再去加载当前的代理)

(2).参数二

指定生成的代理有那些方法
用数组的方式来体现,数组里面的参数都是字节码
new class[]{Star.class,==A.class==}
数组里面能代理很多方法,但是身为大明星,经纪人代理的所有方法大明星都要能实现
能代理的方法都在接口当中

(3).参数三

用来指定生成的代理对象要干嘛
参数三里面是经纪人的活动,参数二里面包含的是大明星的活动

InvocationHandIer 是一个接口,所以要写它实现类的对象(匿名内部类完成)

(1).参数一

代理的对象,也就是经纪人,一般不会去用

(2).参数二

要运行的方法,也就是要让大明星做的事

(3).参数三

调用大明星的方法时,要传递的参数

图片

posted @ 2026-01-15 00:05  水水日  阅读(2)  评论(0)    收藏  举报