当前位置: 首页 > news >正文

java-动态代理

什么是动态代理?

        就是无侵入式的给代码增加额外的功能。

程序为什么需要代理?代理长什么样?

如图:

中介如何知道要派有唱歌,跳舞方法的代理呢?

      通过接口的方式去实现的

下面我们来创建一个简单的对象:

package dongtaidaili.proxy;public class BigStar implements Star{private String name;public BigStar() {}public BigStar(String name) {this.name = name;}// 唱歌public String sing(String name) {System.out.println(this.name + "正在唱歌..."+ name);return "谢谢";}// 跳舞public void dance() {System.out.println(this.name + "正在跳舞...");}/*** 获取* @return name*/public String getName() {return name;}/*** 设置* @param name*/public void setName(String name) {this.name = name;}public String toString() {return "BigStar{name = " + name + "}";}
}

接口:

package dongtaidaili.proxy;public interface Star {// 我们可以吧所有想要被代理的方法定义在接口中public String sing(String name);// 唱歌public void dance(); // 跳舞
}

如何为java对象创建一个代理对象?

        java.lang.reflect.Proxy类,提供了为对象产生代理对象的方法:

public static Object newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h)

---参数1:用于指定那个类加载器,去加载生成的代理类

---参数2:指定接口,这些接口用于指定生成的代理长什么,也就是有哪些方法

---参数3:用来指定生成的代理对象要干什么事情

package dongtaidaili.proxy;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;import static sun.net.www.protocol.http.AuthCacheValue.Type.Proxy;public class ProxyUtil {/*方法的作用:给一个明星的对象,创建一个代理形参:被代理的明星对象返回值:给明星创建的代理*/public static Star createProxy(BigStar bigStar) {
/*
public static Object newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h)---参数1:用于指定那个类加载器,去加载生成的代理类---参数2:指定接口,这些接口用于指定生成的代理长什么,也就是有哪些方法---参数3:用来指定生成的代理对象要干什么事情*/Star star = (Star) java.lang.reflect.Proxy.newProxyInstance(ProxyUtil.class.getClassLoader(),new Class[]{Star.class},new InvocationHandler() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {if (method.getName().equals("sing")){System.out.println("唱歌代理");} else if (method.getName().equals("dance")){System.out.println("跳舞代理");}return method.invoke(bigStar,args);}});return star;}
}

总结:

1.为什么需要代理呢?

        代理可以无侵入式的给对象增强其他的功能

2.代理长什么样?

        代理里面就是对象被代理的方法

3.java通过上面来保证代理的样子?

        通过接口保证,后米娜的对象和代理需要实现同一个接口,接口中就是被代理的所有方法。

http://www.lryc.cn/news/623214.html

相关文章:

  • vue优化有哪些手段?
  • InfluxDB 数据迁移工具:跨数据库同步方案(一)
  • 8.15 JS流程控制案例+解答
  • select、poll 和 epoll
  • InfluxDB 数据迁移工具:跨数据库同步方案(二)
  • 【大模型核心技术】Dify 入门教程
  • 制作 Windows 11 启动U盘
  • Linux-Vim编辑器最简美化配置
  • 全排列问题回溯解法
  • Linux软件编程(六)(exec 函数族、system 实现、进程回收与线程通信)
  • 基于动捕实现Epuck2的轨迹跟踪
  • 数据结构:迭代方法(Iteration)实现树的遍历
  • 记录一下第一次patch kernel的经历
  • 【UHD】vivado 2021.1 编译
  • 解决 Microsoft Edge 显示“由你的组织管理”问题
  • c#Blazor WebAssembly在网页中多线程计算1000万次求余
  • Spring Framework:Java 开发的基石与 Spring 生态的起点
  • Agent中的memory
  • 西湖大学新国立,多模态大语言模型能指引我回家吗?ReasonMap:基于交通地图的细粒度视觉推理基准研究
  • imx6ull-驱动开发篇27——Linux阻塞和非阻塞 IO(上)
  • pdf合并代码
  • 杂记 03
  • 链表。。。
  • 全面解析Tomcat生命周期原理及其关键实现细节
  • 【论文笔记】STORYWRITER: A Multi-Agent Framework for Long Story Generation
  • 云原生俱乐部-RH124知识点总结(3)
  • 如何解决C盘存储空间被占的问题,请看本文
  • 异构数据库兼容力测评:KingbaseES 与 MySQL 的语法・功能・性能全场景验证解析
  • 后量子密码算法SLH-DSA介绍及开源代码实现
  • huggingface TRL中的对齐算法: KTO