gpt4 book ai didi

java - 在 Java 中,如何围绕在更改属性时调用方法的对象构建 "proxy wrapper"?

转载 作者:搜寻专家 更新时间:2023-11-01 01:59:06 26 4
gpt4 key购买 nike

我正在寻找类似于 Proxy pattern 的东西或 Dynamic Proxy Classes ,只是我不想在调用真实对象之前拦截方法调用,而是我想拦截正在更改的属性。我希望代理能够代表具有不同属性集的多个对象。类似于 the Proxy class in Action Script 3会好的。

总体而言,这是我想要实现的目标:

我有一个线程与一个对象一起运行,该对象管理一个值列表(数字、字符串、对象),这些值由程序中的其他线程移交,因此该类可以负责在磁盘上为检查应用程序的目的。此持久对象管理一个“脏”标志,表示值列表自上次检查点以来是否已更改,并且需要在忙于将列表写入磁盘时锁定列表。

持久化器和其他组件通过通用名称识别特定项目,以便在从崩溃中恢复时,其他组件可以首先检查持久化器是否保存了最新副本,并从它们停止的地方继续工作。

在正常操作期间,为了处理他们移交给持久化对象的对象,我希望他们接收到对代理对象的引用,该代理对象看起来就像是原始对象,但每当他们更改其上的某些值时,持久化对象会注意到并采取相应的行动,例如在实际设置实际值之前将项目或列表标记为脏。


编辑:或者,Java 中是否存在通用 setter (如 PHP 5 中的 setter ),即在属性不存在时调用的方法?或者是否有一种类型的对象可以在运行时添加属性?

最佳答案

如果“属性”是指 JavaBean 属性,即代表一个 getter 和/或 setter 方法,那么您可以使用动态代理来拦截 set 方法。

如果您指的是实例变量,那么没有什么可以做的——在 Java 级别上不行。也许可以通过 manipulations on the byte code level 来做些什么虽然。

实际上,最简单的方法可能是使用 AspectJ并定义一个 set() 切入点(它将在字节码级别拦截字段访问)。

关于java - 在 Java 中,如何围绕在更改属性时调用方法的对象构建 "proxy wrapper"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/474320/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com