我有一个框架,代表客户端加载任意类的实例,并希望字段(特别是私有字段)只有在首次访问字段时才能懒惰地初始化/加载。
有没有办法拦截这样的私有字段访问并在返回值之前将值注入字段(可能“缓存”它们)?
我猜java.lang.reflect.Proxy / InvocationHandler是排除在外的,因为它们只能拦截方法调用。
我有一种直觉,字节码操作库可以处理这个问题。我查看了ASM,Javassist,BCEL,cglib并搜索了所有内容,但未能找到有关如何实现此目的的明确说明。
答案 0 :(得分:0)
使用ASM或类似框架的字节码检测肯定是可行的,但您必须了解字节码内部工作以及一些JVM内部。
更简单的方法是使用AspectJ并在对象上应用方面。关于Java对象的透明聚类,这个AOSD'07 paper中有一些类似的例子。