我只知道用於AOP的動態代理。
但是,它似乎也可以用於延遲加載。
以下來自一篇文章的例子旨在證明這一點。
但是,我不明白這是如何不同於一個正常的訪問者,什麼是「懶惰」在這裏加載?
任何幫助理解作者意圖通過延遲加載意味着什麼,讚賞。動態與延遲加載
private Category tupleToObject(Serializable[] tuple) {
Category category = new Category((String)tuple[1],
(YearMonthDay) tuple[2]);
category.setId((Long) tuple[0]);
category.setParent(lazyGet((Long) tuple[3]));
return category;
}
protected CategoryItf lazyGet(Long id) {
if (id == null) {
return null;
}
return (CategoryItf)Proxy.newProxyInstance(
CategoryItf.class.getClassLoader(),
new Class[] { CategoryItf.class },
new LazyLoadedObject() {
protected Object loadObject() {
return get(id);
}
});
}
public abstract class LazyLoadedObject implements InvocationHandler {
private Object target;
public Object invoke(Object proxy,
Method method, Object[] args)
throws Throwable {
if (target == null) {
target = loadObject();
}
return method.invoke(target, args);
}
protected abstract Object loadObject();
}
這竟被如何有任何不同從以下方面:
private Category tupleToObject(Serializable[] tuple) {
Category category = new Category((String)tuple[1],
(YearMonthDay) tuple[2]);
category.setId((Long) tuple[0]);
category.setParent(get((Long) tuple[3]));
return category;
}
在這兩種情況下,在需要的時候家長只被創建。
編輯使我的問題更加集中。 – IUnknown
AlexR,我沒有得到我的答案,並不能提出我的問題作爲新的,它現在太下了列表,請幫助我在這裏.. http://stackoverflow.com/questions/17220399/cannot-instantiate-a -class-using-a-button –