¿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 una diferencia sintáctica real 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 la interfaz Serializable , y lo que significa, a su respuesta, estaría muy agradecido.

Un JavaBean es solo un estándar

  1. Todas las propiedades privadas (use getters / setters )
  2. Un constructor público sin argumento
  3. Implementa Serializable .

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

Con respecto a Serializable , de la documentación API :

La clase que implementa la interfaz java.io.Serializable habilita la serialización de una clase. Las clases que no implementen esta interfaz no tendrán serialización ni deserialización en ninguno de sus estados. Todos los subtipos de una clase serializable son ellos mismos serializables. La 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).

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.Serializable , y lo hace correctamente), que
  • tiene “propiedades” cuyos getters y setters son solo métodos con ciertos nombres (como, por ejemplo, getFoo() es el getter para la propiedad “Foo”), y
  • tiene un constructor predeterminado público (por lo que se puede crear a voluntad y configurar estableciendo sus propiedades).

Actualizar:

En cuanto a 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 sea serializable, o marcados como transient para que Java no intente incluirlos. (Esto, por supuesto, significa que transient campos transient no sobrevivirán al viaje en una secuencia. Una clase que tenga campos transient debe estar preparada para reiniciarlos si es necesario).

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

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

  1. Implementar 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).

Propiedades de JavaBeans

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

  1. La clase JavaBean debe implementar 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; } } 

Los Java Beans utilizan 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.

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.

Explicación con un ejemplo.

1. import java.io.Serializable

En cuanto a la serialización, vea la 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; } } 

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 siga este enlace.

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

Sin embargo, IMO, es más que un simple estándar de syntax. 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 tutorial de Oracle sobre Java Beans , puedes obtener una mejor comprensión al respecto.

Con respecto a la segunda parte de su pregunta, la serialización es un mecanismo de persistencia utilizado para almacenar objetos como una secuencia de bytes firmados. Dicho de forma menos formal, almacena el estado de un objeto para que pueda recuperarlo más tarde, mediante la deserialización.

Un Java Bean es una clase Java [conceptual] que debe seguir las siguientes convenciones:

  1. Debería tener un constructor sin argumentos.
  2. Debería ser Serializable.
  3. Debería proporcionar métodos para establecer y obtener los valores de las propiedades, conocidos como métodos getter y setter.

Es un componente de software reutilizable. Puede encapsular muchos objetos en un objeto para que se pueda acceder al mismo objeto desde múltiples lugares y sea un paso hacia el mantenimiento fácil del código.

Son serializables, tienen un constructor de argumento cero y permiten el acceso a propiedades usando los métodos getter y setter. El nombre “Bean” se le dio para abarcar este estándar, que tiene como objective crear componentes de software reutilizables para Java. according to wiki

Los objetos que forman la columna vertebral de su aplicación y que son gestionados por el contenedor Spring IoC se llaman beans. Un bean es un objeto instanciado, ensamblado y gestionado por un contenedor Spring IoC. De lo contrario, un bean es simplemente uno de los muchos objetos en su aplicación. according to spring io .

Los Java Beans son simplemente clases de Java streams que siguen ciertas convenciones; no necesitas herramientas especiales para crearlas.

Hay dos convenciones principales que se deben seguir al crear clases de Java Bean:

  • Cada ” propiedad ” de la clase Java Bean se implementa definiendo dos funciones públicas (una función “get” y una función “set”)
  • Las ” operaciones ” de la clase Java Bean son las otras funciones públicas definidas en la clase.

Para entender JavaBean necesitas notar lo siguiente: JavaBean es un material conceptual y no puede representar una clase de cosas específicas

JavaBean es una herramienta de desarrollo que se puede visualizar en la operación de componentes de software reutilizables

JavaBean se basa en la especificación Sun JavaBeans y puede ser componentes reutilizables. Su característica más importante es la reutilización.