问题标签 [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 投票
2 回答
3045 浏览

java - RMI 的动态代理存根实现

我想了解动态代理存根实现实际上是如何在幕后完成的。根据我阅读的内容,如果没有找到预先生成的存根类,则在导出远程对象时,RMI 运行时将生成一个动态代理来充当存根。然后将该存根绑定到 RMI 注册表,然后由某些 RMI 客户端访问。

问题是:既然存根实际上是一个动态生成的代理,它的类定义在客户端是不可用的,那么为什么客户端仍然能够从 RMI Registry 中检索存根呢?幕后是否发生了某种动态类加载,或者 RMI 是否使用另一种技术来解决这个问题?

0 投票
5 回答
58110 浏览

java - 什么是动态代理类,我为什么要使用一个?

使用动态代理的用例是什么?

它们与字节码生成和反射有何关系?

有什么推荐的读物吗?

0 投票
3 回答
5596 浏览

language-agnostic - C# 委托、动态代理、闭包和函数指针之间有什么区别?

将方法或函数作为数据传递的常用方法有哪些有用的定义,例如:

  • 代表们
  • 闭包
  • 函数指针
  • 通过动态代理调用和
  • 一流的方法?
0 投票
3 回答
6886 浏览

java - 如何在接受参数的构造函数上使用动态代理?

我尝试使用 Sun 在其 代理使用页面上发布的代码,并尝试使用 DebugProxy 打印调用了哪个方法。问题是,我正在为其创建代理的对象需要有一个参数。如果我尝试使用构造函数的参数创建代理,我会收到以下错误:

我创建了这样的代理:

如何创建代理实例,并且仍然调用正确的构造函数?

0 投票
2 回答
2576 浏览

c# - 在 NHibernate 对象上使用动态代理

我正在尝试使用 Castle.DynamicProxy2 来清理 NHibernate 持久类中的代码。这是它的一个简单版本。

宠物类:

及其映射文件:

需要审计 Pet 类的实例。通常,属性 Name 和 Age 不会是自动属性,而是包含记录值更改的逻辑。现在,我正在考虑使用代理在属性设置器中注入审计逻辑。为此,我创建了 Auditor IInterceptor:

使用 Castle.DynamicProxy2 创建 Pet 类的审核实例非常简单。

现在问题来了。由于 Pet 是持久化的,因此系统需要处理通过 NHibernate 获取的 Pet 实例。我想要发生的是 NHibernate 自动返回 Pet 代理的实例,如下所示:

我有这样的事情来解决它:

whereProxyHelper.GetProxyType<Pet>()将返回缓存的 Pet 代理类型。主要缺点是该解决方案不适用于通用列表(例如IList<Pet>)。我正在尝试清理的现有系统广泛使用它们。

因此,我希望是否有人对我正在做的事情是否可取有任何解决方法或任何见解。

太感谢了,

卡洛斯

0 投票
1 回答
359 浏览

c# - 您可以在 Web 服务引用上使用城堡动态代理吗?

是否可以在已添加到 Visual Studio 项目的 Web 服务引用上创建动态代理?

我已经以正常方式添加了 Web 服务引用,并尝试使用 Castle 创建一个动态代理,以将方法调用包装在 try/catch 中以翻译任何 SoapExceptions,但是在运行它时我遇到了很多错误可序列化的类?

有没有人做过这样的事情?

谢谢

0 投票
4 回答
897 浏览

.net - 如何拦截 WCF 类的创建

我有一个未使用服务引用的 wcf 服务。类和接口在客户端服务器引用的 dll 中定义。与服务器的通信使用从 ClientBase 派生的类。

我想在客户端拦截 wcf 的默认对象创建,以便我可以提供实现 INotifyPropertyChanged 的​​子类型(由城堡动态代理创建)。

NHibernate 返回一个实现 INotifyPropertyChanged 的​​类的基本相同的想法仅用于 wcf。

0 投票
3 回答
16177 浏览

java - Java动态代理的性能成本

许多现代框架(Spring、Hibernate)使用 Java 动态代理提供了非常好的动态行为,但与之相关的确切性能成本是多少?是否有可用于 Sun JVM 的公共基准?

0 投票
1 回答
1458 浏览

c# - 仅使用 DynamicProxy 拦截接口方法

我有这样的界面

实现该接口并具有另一个方法的类

还有一个拦截器

我只想拦截 IService 上存在的 Service 上的方法(即我想拦截 InterceptedMethod() 而不是 SomeMethod()),但我不想使用 IProxyGenerationHook 中的 ShouldInterceptMethod。

我可以这样做,但由于它返回一个接口,我不能在这个对象上调用 SomeMethod

可以工作的一件事是从 SomeMethod() 中删除虚拟并这样做

但我不喜欢这个解决方案。

我不喜欢使用 IProxyGenerationHook 中的 ShouldInterceptMethod,因为每次我更改接口时,我也需要更改 ShouldInterceptMethod,而且有一天有人可以重构方法名称并且不再拦截该方法。

还有其他方法可以做到这一点吗?

0 投票
3 回答
3853 浏览

c# - 创建 INotifyPropertyChanged 代理以将调用调度到 UI 线程

我想创建一个动态代理,用于将 WinForms 控件绑定到由不同(非 GUI)线程更改的对象。这样的代理将拦截 PropertyChanged 事件并使用适当的 SynchronizationContext 调度它。

这样我就可以使用辅助类来完成这项工作,而不必每次都手动实现同步(if (control.InvokeRequired) etc.)。

有没有办法使用 LinFu、Castle 或类似的库来做到这一点?

[编辑]

数据源不一定是列表。它可以是任何业务对象,例如:

我可以创建一个可以完成这项工作的包装器,它看起来像这样:

(这段代码可能有一些错误,我正在弥补)

我想做的是为此设置一个动态代理(Reflection.Emit),例如

我想知道使用现有的动态代理实现是否可以实现这样的事情。

一个更普遍的问题是:创建动态代理时如何拦截事件?在所有实现中都很好地解释了拦截(覆盖)属性。

[编辑2]

我需要代理的原因(我认为)是堆栈跟踪如下所示:

您可以看到BindToObject.PropValueChanged没有将sender实例传递给PropertyManager,并且 Reflector 显示 sender 对象在任何地方都没有被引用。也就是说,当PropertyChanged事件触发时,组件会使用反射来访问原始(绑定)数据源的属性。

如果我将我的对象包装在一个只包含事件的类中(如Sam建议的那样),那么这样的包装类将不包含任何可以通过反射访问的属性。