JavaTM Platform
Standard Ed. 6

java.beans
클래스 PersistenceDelegate

java.lang.Object 
  상위를 확장 java.beans.PersistenceDelegate
직계의 기존의 서브 클래스:
DefaultPersistenceDelegate


public abstract class PersistenceDelegate
extends Object

PersistenceDeligate 클래스는, 클래스의 공개 API 에 포함되는 메소드에 의해, 지정된 클래스의 인스턴스 상태를 표현합니다. 예를 들어, 이 위양 모델을 채용하고 있는 XMLEncoder 등의 스트림은, 지금까지와 같이 지속성과 클래스 자체를 관련짓는 대신에,ObjectOutputStream 로 사용되는 readObject 메소드와 writeObject 메소드에 의해, 그 동작을 클래스로부터 떼어내 관리할 수가 있습니다. 일반적으로, 클래스는, 이 위양 schema를 사용해 이러한 정보나 규약을 간단하게 표현하는데 최적의 장소입니다. 그러나, 단 1 개의 클래스에 사소한 문제가 포함되어 있는 것만으로, 객체 그래프 전체의 기입을 할 수 없게 되는 경우도 있습니다. 이 경우, 어플리케이션 개발자는, 문제의 발생하고 있는 클래스의 그림자를 로컬로 독자적으로 작성하는지, 지속성을 유지하기 위한 그 외의 수법을 뽑게 됩니다. 이러한 상황으로 이 위양 모델을 이용하면, 어플리케이션 개발자는, 어플리케이션 자체에는 포함되지 않는 클래스의 구현으로 변경을 더하는 일 없이, 비교적 깨끗한 방법으로 직렬화 처리의 모든 국면을 제어할 수가 있습니다.

이 지속 schema는, 위양 모델을 사용한다고 하는 점 뿐만이 아니라, 대응하는 readObject 메소드없이 writeObject 메소드의 아날로그를 요구한다고 하는 점에서도, 종래의 직렬화 schema와는 다릅니다. writeObject 메소드의 아날로그는, 공개 API 를 사용해 개개의 인스턴스를 encode 합니다. 직렬화 된 폼의 read 수속은, Java 언어 스펙에 기록되고 있는 대로, 메소드 호출의 시멘틱스에 의해 정의되고 있기 (위해)때문에,readObject 메소드의 아날로그를 정의할 필요는 없습니다. 이 수법으로 작성된 어카이브(archive)가 참조처 클래스의 비공개 구현의 변경의 영향을 받지 않게 하려면 , 버젼 마다 변화한다고 생각되는 writeObjectreadObject 의 구현의 의존관계(dependencies)을 제거할 필요가 있습니다.

이하와 같이, 지속적인 위양은, 객체의 지속성에 관한 모든 국면을 제어합니다.

도입된 버젼:
1.4
관련 항목:
XMLEncoder

생성자 의 개요
PersistenceDelegate ()
           
 
메소드의 개요
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)
          newInstance 에 일련의 문장을 적용하는 것으로써 oldInstance 와 등가의 카피를 작성할 수 있는 경우는 true 를 돌려줍니다.
 void writeObject (Object  oldInstance, Encoder  out)
          writeObject 는, 지속성을 실현하는 유일한 수단으로서Encoder 에 의해, 종래의 위양 모드로 사용됩니다.
 
클래스 java.lang. Object 로부터 상속된 메소드
clone , equals , finalize , getClass , hashCode , notify , notifyAll , toString , wait , wait , wait
 

생성자 의 상세

PersistenceDelegate

public PersistenceDelegate()
메소드의 상세

writeObject

public void writeObject(Object  oldInstance,
                        Encoder  out)
writeObject 는, 지속성을 실현하는 유일한 수단으로서Encoder 에 의해, 종래의 위양 모드로 사용됩니다. 이 메소드는 파이널이 아닙니다만, 일반적으로, 서브 클래스화의 필요는 없습니다.

이 구현은, 최초로, 스트림이 벌써 이 객체를 검출하고 있을지 어떨지를 확인합니다. 다음에, 스트림로부터 반환된 후보가 oldInstance 의 정확한 카피로 변경 가능한가 어떤가를 확인하기 위해(때문에),mutatesTo 메소드가 불려 갑니다. 변경 가능한 경우,initialize 메소드가 불려 가 초기화를 합니다. 변경할 수 없는 경우, 후보는 스트림로부터 삭제되어instantiate 메소드의 호출에 의해, 이 객체의 새로운 후보가 작성됩니다.

파라미터:
oldInstance - 이 식에서 작성되는 인스턴스
out - 이 식이 기입해지는 스트림

mutatesTo

protected boolean mutatesTo(Object  oldInstance,
                            Object  newInstance)
newInstance 에 일련의 문장을 적용하는 것으로써 oldInstance 와 등가의 카피를 작성할 수 있는 경우는 true 를 돌려줍니다. 이 메소드의 스펙에서는, 공개 API 에 포함되어 있는 관련 메소드의 동작을 비교했을 때, 변경 후의 인스턴스와 oldInstance 를 구별할 수 없는 경우에, 이것들을 「등가이다」라고 합니다. 덧붙여 엄밀하게 말하면,hashCodetoString 와 같은 메소드는, 전혀 분별이 되지 않는 인스턴스의 카피를 생성하는 것을 대부분의 클래스에 있어 방해하기 (위해)때문에, 여기에서는 「모든 메소드」라고 하는 표현은 아니고 「관련 메소드」라고 하는 표현을 사용하고 있습니다.

2 개의 인스턴스의 클래스가 같은 경우는, 디폴트로 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 와 그 공개 가능 상태 외에, 무엇이 일어났는지를 나타내는 일련의 문장을 생성하는 것으로써, 이 목적을 달성합니다. 이러한 문장은, read시에 입력 스트림 상태를 시뮬레이트 하는 복제된 환경의 요소가 포함된 식을 돌려주는 writeExpression 메소드에 의해, 출력 스트림에 송신됩니다. 반환되는 각 문은, 낡은 환경의 모든 인스턴스를 새로운 환경의 객체로 옮겨놓습니다. 특히, 이러한 문장의 타겟의 참조 (처음은 oldInstance 에의 참조)는,newInstance 의 참조로서 돌려주어집니다. 이러한 문장을 실행하면(자), 새로운 환경의 객체로 변경이 더해지는 것과 동시에, 2 개의 객체 상태가 서서히 가까워져 갑니다. Initialize 메소드가 돌려주어질 때는, 공개 API 로 2 개의 인스턴스를 구별할 수 없게 되고 있을 것입니다. 무엇보다 중요한 것은, 이러한 객체를 등가로 하는 수속이 출력 스트림에 의해 기록되어 스트림의 플래시시에 실제의 출력을 형성한다고 하는 점입니다.

디폴트 구현은, 이 형태의 슈퍼 클래스의 initialize 메소드를 호출합니다.

파라미터:
oldInstance - 카피되는 인스턴스
newInstance - 변경되는 인스턴스
out - 초기화문이 기입해지는 스트림

JavaTM Platform
Standard Ed. 6

버그의 보고와 기능의 요청
한층 더 자세한 API 레퍼런스 및 개발자 문서에 대해서는,Java SE 개발자용 문서를 참조해 주세요. 개발자전용의 상세한 해설, 개념의 개요, 용어의 정의, 버그의 회피책, 및 코드 실례가 포함되어 있습니다.

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.