日期:2014-05-20  浏览次数:20732 次

有人知道这个类java.beans.PersistenceDelegate怎么用吗
有人知道java.beans.PersistenceDelegate这个类的用法吗,帮助里头讲得很抽象也没有例子,Google了半天也没找到相关的,望高手指点!最好能举个例子,多谢了!~

------解决方案--------------------
http://weblogs.java.net/blog/malenkov/archive/2006/08/index.html
------解决方案--------------------
我看的API
方法摘要 
protected void initialize(Class<?> type, Object oldInstance, Object newInstance, Encoder out) 
产生一系列对 newInstance 有副作用的语句,使得新实例等于 oldInstance。 
protected abstract Expression instantiate(Object oldInstance, Encoder out) 
返回其值为 oldInstance 的表达式此方法用于描述应该用来创建给定对象的构造方法或工厂方法。 
protected boolean mutatesTo(Object oldInstance, Object newInstance) 
如果 oldInstance 的等效 副本可以可以通过应用 newInstance 的一系列语句来创建,则返回 true。 
 void writeObject(Object oldInstance, Encoder out) 
writeObject 是持久性的一个入口点,由传统委托模式中的 Encoder 使用。 



方法详细信息 

writeObject
public void writeObject(Object oldInstance,
Encoder out)writeObject 是持久性的一个入口点,由传统委托模式中的 Encoder 使用。尽管此方法不是最终方法,但在普通环境下不必为其创建子类。 
此实现首先检查流是否已经遇到此对象。接着调用 mutatesTo 方法查看是否可以将从流中返回的候选者转变成 oldInstance 的精确副本。如果可以,则调用 initialize 方法执行初始化。如果不可以,则从流中移除该候选者,并调用 instantiate 方法为此对象创建一个新候选者。 


参数:
oldInstance - 将由此表达式创建的势力。
out - 将在其中写入此表达式的流。

--------------------------------------------

mutatesTo
protected boolean mutatesTo(Object oldInstance,
Object newInstance)如果 oldInstance 的等效 副本可以可以通过应用 newInstance 的一系列语句来创建,则返回 true。在此方法的规范中,等效是指修改后的实例其公共 API 中相关方法的行为与 oldInstance 没有区别。[注:在这里使用短语相关 方法而不是使用所有 方法只是因为,为了保证完全正确,类似 hashCode 和 toString 这样的方法阻止大多数类实际产生其实例的无区别副本]。 
如果两个实例的类是相同的,则默认行为返回 true。 


参数:
oldInstance - 要复制的实例。
newInstance - 要修改的实例。 
返回:
如果通过对 oldInstance 进行一系列的修改能够创建 newInstance 的等效副本,则返回 true。

--------------------------------------------

instantiate
protected abstract Expression instantiate(Object oldInstance,
Encoder out)返回其值为 oldInstance 的表达式此方法用于描述应该用来创建给定对象的构造方法或工厂方法。例如,用于 Field 的持久委托的 instantiate 方法可以定义如下: 
 Field f = (Field)oldInstance;
 return new Expression(f, f.getDeclaringClass(), "getField", new Object[]{f.getName()});
 注意,这里声明了所返回表达式的值,因此该表达式的值(由 getValue 返回)将等于 oldInstance。 

参数:
oldInstance - 将由此表达式创建的势力。
out - 将在其中写入此表达式的流。 
返回:
值为 oldInstance 的表达式。

--------------------------------------------

initialize
protected void initialize(Class<?> type,
Object oldInstance,
Object newInstance,
Encoder out)产生一系列对 newInstance 有副作用的语句,使得新实例等于 oldInstance。在此方法的规范中,等效是指在该方法返回之后,修改后的实例其公共 API 中所有方法的行为都与 newInstance 没有区别。 
该实现通常通过产生一系列涉及 oldInstance 及其公共可用状态的 "what happened" 语句来达到此目的。这些语句使用其 writeExpression 方法发送到输出流中,在输入流读取期间,在模拟输入流状态的复制环境中返回涉及元素的表达式。每个返回的语句都将使用新环境中所存在对象代替旧环境中的所有实例。特别是这些语句目标的引用,开始它们是 oldInstance 的引用,返回时成为 newInstance 的引用。执行这些语句会以新环境中对象的一系列修改的形式,实现两个对象状态的递增调整。到 initialize 方法返回时,应该可以通过使用公共 API 来区别两个实例。最重要的是,用来使这些对象看起来相同的步骤顺序将被输出流记录,当刷新流时,将形成实际的输出。 

默认实现调用该类型的超类的 initialize 方法。 


参数:
oldInstance - 要复制的实例。
newInstance - 要修改的实例。
out - 保存所有应该写入的初始化语句的流。
------解决方案--------------------
学习