gpt4 book ai didi

java - 如何观察/跟踪 Java/Scala 中的类成员访问?

转载 作者:行者123 更新时间:2023-11-30 11:44:07 24 4
gpt4 key购买 nike

我正在为现有的 Java ORM (Ebean) 开发 Scala 扩展。该项目的目标是为 ORM 添加尽可能多的类型安全性。而不是

Ebean.find(Product.class).fetch("name", "unit").findList()

我终于希望能够写出类似的东西

(objects of entity[Product] with attributes name and unit) getIt

(请注意,这只是第一种 DSL 方法)。

ORM模型已经定义为

@Entity
public class {
public String name;
public String unit;
}

为了在编译时为查询中的属性实现类型安全,我需要访问它们,例如像 (new Product()).name.

这样的虚拟对象

我认为这是确保仅使用该类中存在的此类模型成员的最佳方法,但是,在运行时,我需要一种方法来识别该变量已被访问。否则我只会调用该成员 name 并且在我的查询中不会知道这一点。

有人知道如何实现这一目标吗? 是否有可能跟踪变量何时被访问并在运行时将该信息提供给任何其他对象?

我已经考虑过挂接到 getter 和 setter 而不是在模型类中使用公共(public)成员,但这会使查询或模型变得非常丑陋。另一个问题是必须为每个模型手动添加任何额外的特定方法。

如果有人能提出可能的解决方案,我会很高兴。谢谢!

最佳答案

如果您愿意将模型对象的字段定义为记录字段之类的东西,Emil 的建议可能会奏效,但如果您使用自定义类型在 Java ORM 之上构建解决方案,则可能会出现问题。如果您需要跟踪字段访问,我认为您最好的选择是使用像 CGLib 这样的库进行运行时字节码检测。或 Javassist .您可以将经过检测的“虚拟”对象传递到函数主体中,然后跟踪在本地线程中访问了哪个字段。 Squeryl 中就是这样做的.

关于java - 如何观察/跟踪 Java/Scala 中的类成员访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10919994/

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