问题标签 [dynamic-proxy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1638 浏览

java - 在 Java 消息调度程序中避免使用原始类型

客观的

我正在尝试构建一个 MessageDispatcher,它将消息从 3rd 方 API 转换为用户定义的消息,然后将它们分派给用户注册的侦听器。

用户将被期望:

  1. 为每种类型的用户消息定义一个接口。
  2. 为每种消息类型向消息调度程序注册一个侦听器。
  3. 将原始/第 3 方数据传递给消息调度程序。
  4. 处理传递回侦听器的消息。

问题描述

不幸的是,我似乎无法避免使用原始类型来实现我想要的 API。我在别处读到,使用 Raw 类型没有例外情况,它们仅存在于语言中以实现向后兼容性。

有没有办法可以更改下面的代码以工作,或者我需要重新设计我的 API?

接口

MessageDispatcher 实现以下接口:

MessageListener 接口定义为:

示例用户消息可能如下所示:

注册监听器

用户可以按如下方式注册监听器:

一个标准的消息调度器可能会实现这样的方法:

发送消息

当 MessageDispatcher 接收到新消息时,它会为该对象创建一个动态代理并将其分派给适当的侦听器。但这就是我的问题所在:

如果我尝试使用我无法发送数据的类型:

这是有道理的,因为我无法知道我的听众接受什么类型的数据以及我正在传递什么类型的数据。

但是,如果我使用原始类型,它可以正常工作:

0 投票
0 回答
778 浏览

c# - 动态代理 IEnumerable

我正在尝试为特定类的对象列表创建动态代理。例如:

但我得到以下异常:

无法解析方法 System.Collections.Generic.IEnumerator`1[System.__Canon] GetEnumerator() 因为方法句柄 System.Collections.Generic.IEnumerable`1[T] 的声明类型是通用的。向 GetMethodFromHandle 显式提供声明类型。

我正在尝试代理 IEnumerable<> 以缓存调用以生成列表本身。

0 投票
3 回答
5223 浏览

php - PHP:使用 __call 覆盖父方法

我想以某种方式隐藏父方法,以便为父类上定义的方法调用子类的 __call 魔术方法。例如:

我已经检查了 rename_function 和 override_function 但它们不适用于方法。ReflectionMethod 有一个我尝试过的 setAccessible 方法,但这似乎只有在您使用 ReflectionMethod 实例来调用该方法时才有效。

背景:试图拥有一个可以利用 PHP 类型检查的 RPC 代理类。因此,如果我有一个 RPCFoo,我可以使用类型提示或 instanceof 来强制执行类型,以便我可以检查($RPCFoo 实例 Foo)。

编辑:基类应该能够在没有代理的情况下按原样使用。这样代理可以成为系统配置的一部分,而不是代码。想想多台服务器都具有相同的代码库,但能够为每个服务器分配某些任务。如果本地服务器不处理请求的服务,类加载器将返回一个代理而不是基类。如果本地服务器确实处理了请求的服务,它将返回基类。

再次编辑:提供的方法是可行的,但对 IDE 和反射隐藏了基类的设计接口。我试图使代理实现干净,以便只需从基类继承并实现代理接口。为了维护基类接口,代理开发者必须重新实现所有公共和受保护的方法来进行远程调用。然后,当基类中的某些内容更新时,代理也必须更新。最后,我想我只是去编写一个使用反射的代理生成器为开发人员做这件事。

感谢您的回复!

0 投票
2 回答
1101 浏览

java - Java 拦截对接口方法的调用

我需要拦截对接口的所有方法调用的调用。我已经使用了 Java 动态代理,但这对我没有帮助。我什至不确定这是否可以实现,但想确认一下。

所以基本上可以说我有一个如下界面:

我想拦截来自 Foo 的任何实现对 getValue() 的所有调用。问题是我无法控制 Foo 的不同实现,因此我无法使用动态代理。

有没有办法我可以做到这一点?

谢谢。

0 投票
2 回答
1193 浏览

c# - 使用内部构造函数为抽象类创建动态代理

我想为 BCL 中的类型创建动态代理,该类型是具有内部构造函数的抽象类。我一直是城堡的动态代理,这失败了,但有一个例外,说明没有无参数构造函数(它们是 - 它是内部的)。

有没有办法用城堡来实现这一点?如果不是,是否有任何其他动态代理框架能够做到这一点?这是开发的开始,因此很容易更改框架。

0 投票
0 回答
93 浏览

wcf - WCF 在反序列化期间使用服务器上的代理对象

我正在尝试跟踪 WCF 中 PUT 请求的更改属性(我们正在执行 REST 而不是 SOAP)。我有一个想法,我正在尝试审查,但我无法通过这一点。

在请求传入的某个时刻,主体(JSON、XML 等)被反序列化为一个对象,该对象稍后将传递给我们的 WCF 服务方法。

即在某些时候,WCF 必须做类似这样的事情

我想更改第一行,以便从代理生成器(如Castle.DynamicProxy)中检索 User 对象:

有谁知道这是否可能?也许我必须制作自己的反序列化器?

0 投票
1 回答
241 浏览

c# - 动态重试代理

考虑以下,它的工作原理:

这样做的问题是我必须为接口的每个方法编写一个代理方法。我想要一个更“动态”的解决方案,以便我可以将 RetryOnException(或任何其他逻辑)应用于任何给定接口上的每个方法。我目前正在查看 Castle DynamicProxy,但如果有其他选项怎么办?

0 投票
0 回答
259 浏览

.net - 如何配置 ninject 以返回 T 的动态代理?

我有一个类UserModel我想代理它进行缓存。所以我已经public class UserModelCached:DynamicProxy<UserModel>通过http://greenicicleblog.com/2010/02/21/piece-of-proxy-cake/

现在我希望 Ninject 仍然能够创建 aUserModel但是当UserModel要求 a 时,它会返回代理。

我能想到的一切似乎都会导致堆栈溢出,因为 ninject 会询问如何创建 UserModel 来创建代理;在哪里获取一个的内部字典将指向获取动态代理的相同方法。我不想硬编码实际UserModel类的参数。

如果不创建接口并将其添加到两个类中,这是否可能?

0 投票
2 回答
397 浏览

proxy - 推荐具有反向代理功能的代理服务器

在我的应用程序中,服务器和客户端都由我自己托管,每个客户端都有一个配置,可以配置它应该连接的服务器,通信基于 HTTP。现在,我要求客户端的连接服务器应该能够动态更改,但是要更改服务器 url 配置将需要重新启动客户端,这将需要几分钟。所以我想在客户端和服务器之间添加一个代理服务器,它可以通过一些规则将来自不同客户端的请求转发到不同的服务器。

我无法添加反向代理服务器,因为我无法区分来自不同客户端的请求,因为我的代理服务器将只有一个域名,我无法在客户端的请求 URL 中添加参数。

但我可以更改客户端以强制它使用代理。

所以我的计划是为客户端设置代理,为每个客户端指定一个虚服务器url,代理服务器在请求中获取服务器url,然后按照规则将请求转发到真实服务器。

有没有服务器可以做这样的事情?当然,如果可以在不重新启动代理服务器的情况下更改规则会更好

0 投票
4 回答
74547 浏览

java - JDK动态代理和CGLib有什么区别?

代理设计模式的情况下,JDK的动态代理和第三方动态代码生成API如CGLib有什么区别?

使用这两种方法有什么区别,什么时候应该更喜欢一种方法?