我希望这是一个不寻常的用例。
假设我有一个实体类 Foo:
@Entity
public class Foo {
@Id
private Long id;
private String bar;
@Transient
private long bazz;
...
}
我还定义了一个拦截器,以便在从数据库中读取 Foo 的实例时初始化 Foo.bazz:
public class MyInterceptor extends EmptyInterceptor {
...
@Override
public boolean onLoad(
Object entity,
Serializable id,
Object[] state,
String[] propertyNames,
Type[] types) {
if(entity instanceof Foo) {
Foo foo = (Foo)entity;
long bazzValue = ... // some very heavyweight code
foo.setBazz(bazzValue);
}
return false;
}
...
}
到目前为止,一切都很好。但并非所有代码路径都需要每个 Foo 实例的 bazz 字段的值。这意味着有时会不必要地调用为每个 Foo 实例查找值的重量级代码。
除非实际调用了 Foo.getBazz() ,否则我如何避免调用代码来查找 bazz 的值?