20 Haziran 2019 Perşembe

Binary Serialization - Serialization Proxy

Giriş
Bu örüntünün kullanılmasının iki sebebi var.
1. Nesnemiz Immutable ise
2. Nesnemiz Serializable olmayan bir başka sınıftan kalıyor ve ata sınıf parameterless (default) constructor sağlamıyorsa.

İlk örüntüyü defa burada gördüm.

Nasıl Çalışır
Java bir nesneyi yazmadan önce writeReplace() metodunun override edilip edilmediğine bakar. Eğer edilmişse writeReplace() metodunun döndürdüğü nesne serialize edilir. Bu nesne bizim Serialization Proxy nesnemizdir.

Okurken, Java yazılmış olan Serialization Proxy  nesnesini okur. İşlemden sonra readResolve () metodunun override edilip edilmediğine bakar. Eğer edilmişse nesnenin - ki bizim Serialization Proxy nesnesidir - readResolve() metodu çağırılır. Bu metod kendi immutable nesnemizi yaratır ve döndürür.

Örnek
Şöyle yaparız.
public class Organization implements Serializable {
  private static final long serialVersionUID = 28484399283838343L;
   
  private Object writeReplace() {
    return new SerializationProxy(this);
  }

  private void readObject(final ObjectInputStream stream) 
  throws InvalidObjectException {
    throw new InvalidObjectException("Proxy required");
  }

  private static class SerializationProxy implements Serializable {
    private static final long serialVersionUID = 484894399233454L;

    
    private Object readResolve() {
      return new Organization(...);
    }
  }
}



Hiç yorum yok:

Yorum Gönder