gpt4 book ai didi

java - 如何在运行时拦截对对象的所有读写访问?

转载 作者:行者123 更新时间:2023-12-03 12:57:17 24 4
gpt4 key购买 nike

我正在开发一个老化的 Java“Swing”应用程序,不幸的是,它使用了非线程安全的数据模型。随着具有多线程和多核 PC 的客户端数量的增长,由于对数据的非同步访问而导致的虚假随机错误的数量也在增加。我们有一个庞大的代码库,大约有 6000 个 Java 文件,其中大部分都非常庞大和复杂。

我想创建一个全局静态 ReentrantReadWriteLock 来控制对模型的访问。我的计划是创建一个虚拟的 ReadWriteLock 实现,它总是成功并且不做任何事情,并在生产系统上使用它,同时在测试系统上使用 ReentrantReadWriteLock,这样过渡可以是渐进的。

我需要的是一种方法来“拦截”测试系统中对模型的所有访问,如果访问不在适当的锁定/解锁 block 的范围内,则记录错误。 ReentrantReadWriteLock 可以告诉您是否拥有写锁。我假设我可以通过使用 ThreadLocal 或其他东西自己跟踪读取锁定状态。

所以现在出现了真正的问题:我如何在 Java 中编写代码,在运行时拦截对定义明确的类集中的任何公共(public)方法的任何访问,并检查访问是否在锁定/解锁 block 内,通过查询全局锁?这可以用 AspectJ 完成吗?还是别的什么?如何?

最佳答案

您可能会发现 java proxies有用。
您不能将调用处理程序添加到现有对象,但您可以在代理中“包装”类的实例。创建的代理对象仍将是 MyClass类型。

关于java - 如何在运行时拦截对对象的所有读写访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4734366/

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