【问题标题】:Intercept private field access to do lazy loading拦截私有字段访问以进行延迟加载
【发布时间】:2012-03-02 17:42:47
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java reflection bytecode


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回答。恐怕 aspectj 对我不起作用,因为我想避免编译时依赖。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 2021-03-07
    • 2020-05-24
    相关资源
    最近更新 更多