|
JavaTM Platform Standard Ed. 6 |
|||||||||
앞의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 | |||||||||
개요: 상자 | 필드 | 생성자 | 메소드 | 상세: 필드 | 생성자 | 메소드 |
java.lang.Objectjava.beans.PersistenceDelegate
public abstract class PersistenceDelegate
PersistenceDeligate 클래스는, 클래스의 공개 API 에 포함되는 메소드에 의해, 지정된 클래스의 인스턴스 상태를 표현합니다. 예를 들어, 이 위양 모델을 채용하고 있는 XMLEncoder
등의 스트림은, 지금까지와 같이 지속성과 클래스 자체를 관련짓는 대신에,ObjectOutputStream
로 사용되는 readObject
메소드와 writeObject
메소드에 의해, 그 동작을 클래스로부터 떼어내 관리할 수가 있습니다. 일반적으로, 클래스는, 이 위양 schema를 사용해 이러한 정보나 규약을 간단하게 표현하는데 최적의 장소입니다. 그러나, 단 1 개의 클래스에 사소한 문제가 포함되어 있는 것만으로, 객체 그래프 전체의 기입을 할 수 없게 되는 경우도 있습니다. 이 경우, 어플리케이션 개발자는, 문제의 발생하고 있는 클래스의 그림자를 로컬로 독자적으로 작성하는지, 지속성을 유지하기 위한 그 외의 수법을 뽑게 됩니다. 이러한 상황으로 이 위양 모델을 이용하면, 어플리케이션 개발자는, 어플리케이션 자체에는 포함되지 않는 클래스의 구현으로 변경을 더하는 일 없이, 비교적 깨끗한 방법으로 직렬화 처리의 모든 국면을 제어할 수가 있습니다.
이 지속 schema는, 위양 모델을 사용한다고 하는 점 뿐만이 아니라, 대응하는 readObject
메소드없이 writeObject
메소드의 아날로그를 요구한다고 하는 점에서도, 종래의 직렬화 schema와는 다릅니다. writeObject
메소드의 아날로그는, 공개 API 를 사용해 개개의 인스턴스를 encode 합니다. 직렬화 된 폼의 read 수속은, Java 언어 스펙에 기록되고 있는 대로, 메소드 호출의 시멘틱스에 의해 정의되고 있기 (위해)때문에,readObject
메소드의 아날로그를 정의할 필요는 없습니다. 이 수법으로 작성된 어카이브(archive)가 참조처 클래스의 비공개 구현의 변경의 영향을 받지 않게 하려면 , 버젼 마다 변화한다고 생각되는 writeObject
와 readObject
의 구현의 의존관계(dependencies)을 제거할 필요가 있습니다.
이하와 같이, 지속적인 위양은, 객체의 지속성에 관한 모든 국면을 제어합니다.
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 |
생성자 의 상세 |
---|
public PersistenceDelegate()
메소드의 상세 |
---|
public void writeObject(Object oldInstance, Encoder out)
writeObject
는, 지속성을 실현하는 유일한 수단으로서Encoder
에 의해, 종래의 위양 모드로 사용됩니다. 이 메소드는 파이널이 아닙니다만, 일반적으로, 서브 클래스화의 필요는 없습니다.
이 구현은, 최초로, 스트림이 벌써 이 객체를 검출하고 있을지 어떨지를 확인합니다. 다음에, 스트림로부터 반환된 후보가 oldInstance
의 정확한 카피로 변경 가능한가 어떤가를 확인하기 위해(때문에),mutatesTo
메소드가 불려 갑니다. 변경 가능한 경우,initialize
메소드가 불려 가 초기화를 합니다. 변경할 수 없는 경우, 후보는 스트림로부터 삭제되어instantiate
메소드의 호출에 의해, 이 객체의 새로운 후보가 작성됩니다.
oldInstance
- 이 식에서 작성되는 인스턴스out
- 이 식이 기입해지는 스트림protected boolean mutatesTo(Object oldInstance, Object newInstance)
newInstance
에 일련의 문장을 적용하는 것으로써 oldInstance
와 등가의 카피를 작성할 수 있는 경우는 true 를 돌려줍니다. 이 메소드의 스펙에서는, 공개 API 에 포함되어 있는 관련 메소드의 동작을 비교했을 때, 변경 후의 인스턴스와 oldInstance
를 구별할 수 없는 경우에, 이것들을 「등가이다」라고 합니다. 덧붙여 엄밀하게 말하면,hashCode
나 toString
와 같은 메소드는, 전혀 분별이 되지 않는 인스턴스의 카피를 생성하는 것을 대부분의 클래스에 있어 방해하기 (위해)때문에, 여기에서는 「모든 메소드」라고 하는 표현은 아니고 「관련 메소드」라고 하는 표현을 사용하고 있습니다.
2 개의 인스턴스의 클래스가 같은 경우는, 디폴트로 true
가 돌려주어집니다.
oldInstance
- 카피되는 인스턴스newInstance
- 변경되는 인스턴스
oldInstance
로 일련의 변경을 적용하는 것에 의해,
newInstance
와 등가의 카피를 작성할 수 있는 경우 trueprotected 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
를 가지는 식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 |
|||||||||
앞의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 | |||||||||
개요: 상자 | 필드 | 생성자 | 메소드 | 상세: 필드 | 생성자 | 메소드 |
Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.