que annotation java serialization keyword transient modifier

que - transient java annotation



¿Por qué usar la palabra clave `transient` en java? (5)

Esta pregunta ya tiene una respuesta aquí:

Tengo un problema relacionado con el uso de la palabra clave transient antes del modificador private en Java.

declaración de variable:

transient private ResourceBundle pageResourceBundle;

Cuando lo busqué en Google, encontré estos documentos a continuación, pero están hablando de serializados. En realidad, mi clase no implementa ningún serializado.

Para más información:

http://java91.blogspot.in/2017/01/why-does-java-have-transient-fields.html

Mi clase se ve así:

public class LoginViewModel extends AbstractViewModel { transient private ResourceBundle pageResourceBundle; @AfterCompose public void afterCompose(@ContextParam(ContextType.VIEW) Component view) { initializeLoginValues(); boolean timeout = BooleanUtils.toBoolean(getHttpServletRequest().getParameter("timeout")); if (timeout) { Messagebox.show(pageResourceBundle.getText("MSG_SESSION_HAS_EXPIRED_PLEASE_LOGIN"), pageResourceBundle.getText("LABEL_ALERT"), Messagebox.OK, Messagebox.ERROR); } view.getPage().setTitle(CsdcLicence.get().getApplicationName()); }

Tengo algunas preguntas.

1. ¿Por qué usar la palabra clave transient antes de una variable privada?

2. ¿Cuál es el propósito de usar esta palabra clave?


Las variables transitorias nunca se serializan en java.

Marca una variable miembro que no se serializará cuando persista en las secuencias de bytes. Cuando un objeto se transfiere a través de la red, el objeto debe ser ''serializado''. La serialización convierte el estado del objeto en bytes seriales. Esos bytes se envían a través de la red y el objeto se recrea a partir de esos bytes. Las variables de miembro marcadas por la palabra clave java transient no se transfieren, se pierden intencionalmente.

Por favor, eche un vistazo a lo que es la serialización . y también referir esto

Ejemplo

public class Foo implements Serializable { private String saveMe; private transient String dontSaveMe; private transient String password; //... }

En el ejemplo anterior, dontSaveMe y la password nunca se serializan, ya que se declaran como transient variables .


Y un uso breve - caso:
Imagine exponer un Usuario - Objeto a través de un servicio web disponible al público. Seguro que le gustaría exponer cosas como apodo, estado en línea, tal vez correo electrónico o ubicación. Definitivamente no querrás exponer la contraseña que usa el usuario para iniciar sesión. Si bien esta contraseña podría ser una propiedad de su objeto Usuario, no debería serializarse, por ejemplo, al serializar el objeto a una cadena JSON para el servicio web mencionado.


palabra clave transient sugiere que el objeto no debe ser serializado ni persistido . Puede usarlo si no desea serializar objetos pesados ​​(como Wrapper s, por ejemplo, que puede contener mucha lógica comercial).

@Transient anotación de @Transient sugiere que el objeto no debe persistir (si has estado jugando con Hibernate, por ejemplo), pero se puede serializar .

He incluido la explicación de la anotación, porque recuerdo que los dos me confundieron. :-)


transient se utiliza para especificar qué propiedades de un objeto no se guardarán ni se serializarán . Por ejemplo, al guardar un objeto en un archivo, transient especifica qué propiedades o atributos no se guardarán en ese archivo cuando ese objeto se guarde en un archivo.

Cuando el objeto se vuelve a crear a partir del archivo, el valor de ese atributo transient (o propiedad privada) no se volverá a crear ya que nunca se guardó, o se serializó a ese archivo. En algunos casos, es posible que desee evitar la persistencia de algunas de estas variables de instancia privadas o atributos de un objeto, transient permite hacer eso.


  • La palabra clave transitoria solo se puede aplicar a las variables miembro.
    Aplicarlo al método o a la variable local es un error de compilación.

  • La palabra clave transient en Java solía indicar que la variable
    no debe ser serializado Por defecto, todas las variables en el objeto se convierten a estado persistente. En algunos casos, es posible que desee
    evite persistir algunas variables porque no tiene la necesidad de transferir a través de la red. Entonces, puedes declarar esas variables
    como transient