Pregunta ¿Qué es un JavaBean exactamente?


Entendí, creo, que un "Bean" es una clase de Java con propiedades y getters / setters. Por mucho que yo entiendo, es el equivalente de una C struct. ¿Es eso cierto?

Además, ¿hay un verdadero sintáctico diferencia entre un frijol y una clase regular? ¿Hay alguna definición especial o una interfaz?

Básicamente, ¿por qué hay un término para esto?

Editar: Si puede ser tan amable y agregar información sobre el Serializable interfaz, y lo que significa, a su respuesta, estaría muy agradecido.


1361
2017-07-21 00:41


origen


Respuestas:


Un JavaBean es solo una estándar

  1. Todas las propiedades privadas (uso getters / setters)
  2. Un público constructor sin argumentos
  3. Implementos Serializable.

Eso es. Es solo una convención. Sin embargo, muchas bibliotecas dependen de eso.

Con respecto a Serializable, desde el Documentación de API:

La serialización de una clase está habilitada por la clase que implementa el   interfaz java.io.Serializable. Clases que no implementan esto   la interfaz no tendrá ningún estado serializado o deserializado.   Todos los subtipos de una clase serializable son ellos mismos serializables. los   interfaz de serialización no tiene métodos o campos y sirve solo para   identificar la semántica de ser serializable.

En otras palabras, los objetos serializables se pueden escribir en secuencias y, por lo tanto, archivos, bases de datos de objetos, cualquier cosa en realidad.

Además, no hay diferencia sintáctica entre un JavaBean y otra clase: una clase define un JavaBean si sigue los estándares.

Hay un término para esto porque el estándar permite que las bibliotecas hagan cosas programáticamente con instancias de clase que usted defina de una manera predefinida. Por ejemplo, si una biblioteca desea transmitir cualquier objeto que pase a él, sabe que puede hacerlo porque su objeto es serializable (suponiendo que la lib requiera que sus objetos sean JavaBeans adecuados).


1496
2017-07-21 00:45



Hay un término para que suene especial. La realidad no es tan misteriosa.

Básicamente, un "frijol":

  • es un objeto serializable (es decir, implementa java.io.Serializabley lo hace correctamente), que
  • tiene "propiedades" cuyos getters y setters son solo métodos con ciertos nombres (como, por ejemplo, getFoo() es el captador de la propiedad "Foo"), y
  • tiene un constructor predeterminado público (por lo que se puede crear a voluntad y configurar estableciendo sus propiedades).

Actualizar:

Como para Serializable: Eso no es más que una "interfaz de marcador" (una interfaz que no declara ninguna función) que le dice a Java que la clase de implementación consiente (e implica que es capaz) de "serialización", un proceso que convierte una instancia en una secuencia de bytes. Esos bytes pueden almacenarse en archivos, enviarse a través de una conexión de red, etc., y tener suficiente información para permitir que una JVM (al menos, una que conozca el tipo del objeto) reconstruya el objeto más tarde, posiblemente en una instancia diferente del aplicación, o incluso en una máquina entera diferente!

Por supuesto, para hacer eso, la clase tiene que cumplir con ciertas limitaciones. El principal de ellos es que todos los campos de instancia deben ser de tipos primitivos (int, bool, etc.), instancias de alguna clase que también se puede serializar o marcar como transient para que Java no intente incluirlos. (Esto por supuesto significa que transient los campos no sobrevivirán el viaje sobre una secuencia. Una clase que tiene transient los campos deben estar preparados para reiniciarlos si es necesario).

Una clase que no puede cumplir con esas limitaciones no debe implementar Serializable (y, IIRC, el compilador de Java ni siquiera dejar lo hace.)


242
2017-07-21 00:50



Los JavaBeans son clases de Java que se adhieren a una convención de codificación extremadamente simple. Todo lo que tienes que hacer es

  1. Implemente la interfaz java.io.Serializable - Para guardar el estado de un objeto
  2. use un constructor público de argumento vacío - Para instanciar el objeto
  3. Y proporcione métodos public getter y setter: para obtener y establecer los valores de las variables privadas (propiedades).

79
2017-07-21 04:22



Propiedades de JavaBeans

Un JavaBean es un objeto Java que satisface ciertas convenciones de programación:

  1. La clase JavaBean debe implementar cualquiera Serializable o Externalizable 

  2. La clase JavaBean debe tener un constructor no-arg

  3. Todas las propiedades de JavaBean deben tener métodos públicos setter y getter

  4. Todas las variables de instancia de JavaBean deben ser privadas

Ejemplo de JavaBeans

@Entity
public class Employee implements Serializable{

   @Id
   private int id;
   private String name;   
   private int salary;  

   public Employee() {}

   public Employee(String name, int salary) {
      this.name = name;
      this.salary = salary;
   }
   public int getId() {
      return id;
   }
   public void setId( int id ) {
      this.id = id;
   }
   public String getName() {
      return name;
   }
   public void setName( String name ) {
      this.name = name;
   }
   public int getSalary() {
      return salary;
   }
   public void setSalary( int salary ) {
      this.salary = salary;
   }
}

48
2018-01-24 09:33



Los Java Beans usan menos código y más enfoque de trabajo ... Los Java Beans se utilizan en Java EE como un contrato universal para el descubrimiento y acceso en tiempo de ejecución. Por ejemplo, JavaServer Pages (JSP) usa Java Beans como objetos de transferencia de datos entre páginas o entre servlets y JSP. El JavaBeans Activation Framework de Java EE usa Java Beans para integrar el soporte para tipos de datos MIME en Java EE. La API de administración de Java EE usa JavaBeans como base para la instrumentación de los recursos que se administrarán en un entorno Java EE.

Acerca de la serialización:

En la serialización de objetos, un objeto se puede representar como una secuencia de bytes que incluye los datos del objeto, así como información sobre el tipo del objeto y los tipos de datos almacenados en el objeto.

Después de escribir un objeto serializado en un archivo, se puede leer del archivo y deserializar, es decir, la información de tipo y los bytes que representan el objeto y sus datos se pueden usar para recrear el objeto en la memoria.


18
2017-09-23 07:30



La Serialización le resultará útil al implementar su proyecto en varios servidores, ya que los beans se conservarán y se transferirán a través de ellos.


17
2017-07-21 06:03



Explicación con un ejemplo.

1. import java.io.Serializable

En cuanto a la serialización, vea el documentación.

2. campos privados

Los campos deben ser privados para evitar que las clases externas modifiquen fácilmente esos campos. En lugar de acceder directamente a esos campos, se utilizan métodos usuagly getter / setter.

3. Constructor

Un constructor público sin ningún argumento.

4. getter / setter

Métodos getter y setter para acceder a campos privados.

/** 1. import java.io.Serializable */
public class User implements java.io.Serializable {
    /** 2. private fields */
    private int id;
    private String name;

    /** 3. Constructor */
    public User() {
    }
    public User(int id, String name) {
        this.id = id;
        this.name = name;
    }

    /** 4. getter/setter */
    // getter
    public int getId() {
        return id;
    }
    public String getName() {
        return name;
    }
    // setter
    public void setId(int id) {
        this.id = is;
    }
    public void setName(String name) {
        this.name = name;
    }
}

16
2017-08-22 12:45



Según la Wikipedia:

  1. La clase debe tener un constructor predeterminado público (sin argumentos). Esto permite una fácil creación de instancias dentro de marcos de edición y activación.

  2. Las propiedades de clase deben ser accesibles usando get, set, is (se puede usar para propiedades booleanas en lugar de get) y otros métodos (los llamados métodos de acceso y métodos de mutador) según una convención de nomenclatura estándar. Esto permite una inspección automatizada y una fácil actualización del estado del bean dentro de los marcos, muchos de los cuales incluyen editores personalizados para varios tipos de propiedades. Los setters pueden tener uno o más de un argumento.

  3. La clase debe ser serializable. [Esto permite que las aplicaciones y los marcos guarden, almacenen y restablezcan de manera confiable el estado del bean de una manera independiente de la VM y de la plataforma.]

Para más información, sigue esto enlazar.


9
2018-06-16 11:41



Java Beans es un estándar, y sus requisitos básicos de sintaxis han sido claramente explicados por las otras respuestas.

Sin embargo, IMO, es más que un simple estándar de sintaxis. El significado real o uso previsto de Java Beans es, junto con diversos soportes de herramientas en torno al estándar, facilitar la reutilización de código y la ingeniería de software basada en componentes, es decir, permitir a los desarrolladores crear aplicaciones ensamblando componentes existentes (clases) y sin tener que escribir código (o solo tiene que escribir un pequeño código de pegamento). Lamentablemente, esta tecnología es subestimada y subutilizada por la industria, lo que se puede deducir de las respuestas de este hilo.

Si lees el Oracle tutorial sobre Java Beans, puedes obtener una mejor comprensión en eso.


8
2018-05-21 15:11