java - 拦截私有(private)字段访问进行延迟加载

标签 java reflection bytecode

我有一个框架,可以代表客户端加载任意类的实例,并且希望字段(特别是私有(private)字段)仅在首次访问字段时才延迟初始化/加载。

有没有办法在返回值之前拦截此类私有(private)字段访问并将值注入(inject)字段(也可能“缓存”它们)?

我猜 java.lang.reflect.Proxy/InitationHandler 已被排除,因为它们只能拦截方法调用。

我有一种直觉,字节码操作库可以处理这个问题。我查看了 ASM、Javassist、BCEL、cglib 并进行了全面搜索,但没有找到任何关于如何实现这一目标的明确说明。

最佳答案

这对于使用 ASM 或类似框架的字节码检测来说当然是可行的,但您必须了解字节码内部工作原理以及一些 JVM 内部结构。

更简单的方法是使用 AspectJ 并将方面应用于对象。这个AOSD'07 paper中有一些类似的例子关于 Java 对象的透明集群。

关于java - 拦截私有(private)字段访问进行延迟加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9537885/

相关文章:

python - 警告带有自由变量的每个(嵌套)函数(递归)

java - 方法签名中带或不带synchronized关键字的方法具有相同的字节码

java字节码类定义

Java 优化 : bytecode-only vs JIT

Javascript 回溯

reflection - 戈朗 : how to use interface{} type to insert a value into the middle of a slice?

java - 使用 JODA 将 RFC 3339 从字符串解析为 java.util.Date

java - 与 Fitbit 的 Android 应用程序集成(Fitbit Tracker)

java - neo4j modell 与 n 个属性的关系 vs n 与一个属性的关系

java - 数据排序器.java :18: error: cannot find symbol