【问题标题】:When to use "Dynamic Proxy class" or "standard proxy" pattern?何时使用“动态代理类”或“标准代理”模式?
【发布时间】:2016-02-08 21:39:02
【问题描述】:

为什么要使用“动态代理类”而不是“标准代理”模式?

两者的优缺点是什么?

看起来它们都有相同的最终结果,只是它们的实现方式不同。

动态代理类 https://docs.oracle.com/javase/8/docs/technotes/guides/reflection/proxy.html

动态代理类是实现接口列表的类 在运行时指定,以便通过其中一个方法调用 类实例上的接口将被编码和分派 通过统一的接口到另一个对象。因此,动态代理 类可用于为列表创建类型安全的代理对象 无需预先生成代理类的接口,例如 与编译时工具一样。对一个实例的方法调用 动态代理类被分派到单个方法中 实例的调用处理程序,它们被编码为 java.lang.reflect.Method 对象标识的方法是 调用和一个包含参数的 Object 类型的数组。

标准代理模式https://en.wikipedia.org/wiki/Proxy_pattern

代理,在其最一般的形式中,是一个作为 接口到别的东西。代理可以连接到任何东西: 网络连接、内存中的大对象、文件或其他 昂贵或无法复制的资源。简而言之,一个 代理是客户端调用的包装器或代理对象 访问幕后的真实服务对象。在代理 可以提供额外的功能,例如缓存时 对真实对象的操作是资源密集型的,或者检查 调用对真实对象的操作之前的先决条件。为了 客户端,代理对象的使用类似于使用真实的 对象,因为两者都实现了相同的接口。

【问题讨论】:

    标签: java design-patterns dynamic-proxy proxy-pattern


    【解决方案1】:

    您似乎已经回答了自己的问题。您应该使用更容易为您的用例实现的那个。

    当您在编译时没有每个方法的实现时,您需要动态代理。

    例如,模拟测试库使用动态代理,以便可以编写代码来通用处理任何方法。

    【讨论】:

      猜你喜欢
      • 2014-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-21
      • 2021-12-13
      • 1970-01-01
      相关资源
      最近更新 更多