Java Proxy 理解

Java 的 Proxy 是指 在运行时 动态构造出 一个接口的 实现类(也可以是一次实现多个接口的一个类), 并创建出一个实例 (如果该类之前有动态构造过, 就直接创建实例), 这个实例中所有方法的实现 都是 调用 一个指定好的 InvocationHandle 对象 的 invoke 方法, 通常的做法是 在 InvocationHandle 中(其实应该是派生类) 包含一个真正的实现类的对象, 由 invoke 方法的 method 参数 可以 知道调用的是哪个方法, args 是 参数, 如果 这个 真正实现类的对象 也是 之前接口 的 实现类的话 就可以直接 使用 method.invoke

神奇的地方并不是设计如何调用, 而是 Proxy 的 newProxyInstance 的内部是如何构造出那个实现类的
看源码发现 是 通过拼接字节码形成了一个 .class 文件, 然后 用 ClassLoader 去动态加载它

这里的 .Class 类似 C# 中的 dll(托管的), 然后由 Assembly 来加载它, 拼接字节码 有点类似于 C# 中的 CodeDom 动态构造代码, 但不一样的是, C# 动态构造出的 CodeDom 最终会存成 .cs 文件, 然后通过编译才能形成 dll, 然后程序才能使用, 而 字节码不用, 它更像是 .Net 的中间代码, 它是可以在 JVM 上直接运行的

由此可以看出, 这个特性C#中是没有的(至少目前没有, dll标准还是很复杂的, 目前只有通过编译的动作才能得到它)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值