En la informática basada en la plataforma Java, los JavaBeans son clases que encapsulan muchos objetos en un solo objeto (el bean). Son serializables , tienen un constructor de argumento cero y permiten el acceso a las propiedades usando métodos getter y setter . El nombre "Bean" se le dio para abarcar este estándar, que tiene como objetivo crear componentes de software reutilizables para Java .
Es un componente de software reutilizable escrito en Java que se puede manipular visualmente en una herramienta de creación de aplicaciones.
Características
- Introspección
- La introspección es un proceso de análisis de un Bean para determinar sus capacidades. Esta es una característica esencial de la API de Java Beans porque permite que otra aplicación, como una herramienta de diseño, obtenga información sobre un componente.
- Propiedades
- Una propiedad es un subconjunto del estado de un Bean. Los valores asignados a las propiedades determinan el comportamiento y la apariencia de ese componente. Se establecen mediante un método de establecimiento y se pueden obtener mediante un método de obtención.
- Personalización
- Un personalizador puede proporcionar una guía paso a paso que debe seguir el proceso para utilizar el componente en un contexto específico.
- Eventos
- Los frijoles pueden interactuar con el modelo EventObject EventListener. [ aclaración necesaria ]
- Persistencia
- La persistencia es la capacidad de guardar el estado actual de un Bean, incluidos los valores de las propiedades y las variables de instancia de un Bean, en un almacenamiento no volátil y recuperarlos en un momento posterior.
- Métodos
- Un bean debe utilizar métodos de acceso para encapsular las propiedades. Un bean puede proporcionar otros métodos para la lógica empresarial no relacionados con el acceso a las propiedades.
Ventajas
- Las propiedades, eventos y métodos de un bean se pueden exponer a otra aplicación.
- Un bean puede registrarse para recibir eventos de otros objetos y puede generar eventos que se envían a esos otros objetos.
- Se puede proporcionar software auxiliar para ayudar a configurar un bean.
- Los valores de configuración de un bean se pueden guardar en un almacenamiento persistente y restaurar.
Desventajas
- Una clase con un constructor de argumento cero está sujeta a instanciarse en un estado no válido. [1] Si un desarrollador crea una instancia de esta clase manualmente (en lugar de hacerlo automáticamente mediante algún tipo de marco), es posible que el desarrollador no se dé cuenta de que la clase se ha instanciado de forma incorrecta. El compilador no puede detectar tal problema, e incluso si está documentado, no hay garantía de que el desarrollador vea la documentación.
- Los JavaBeans son inherentemente mutables y, por lo tanto, carecen de las ventajas que ofrecen los objetos inmutables . [1]
- Tener que crear captadores para cada propiedad y definidores para muchos, la mayoría o todos ellos puede llevar a una inmensa cantidad de código repetitivo . Esto se puede mitigar con herramientas como Lombok .
API de JavaBeans
La funcionalidad de JavaBeans es proporcionada por un conjunto de clases e interfaces en el paquete java.beans .
Interfaz | Descripción |
---|---|
AppletInitializer | Los métodos de esta interfaz se utilizan para inicializar Beans que también son subprogramas . |
BeanInfo | Esta interfaz permite al diseñador especificar información sobre los eventos, métodos y propiedades de un Bean. |
Personalizador | Esta interfaz permite al diseñador proporcionar una interfaz gráfica de usuario a través de la cual se puede configurar un bean. |
DesignMode | Los métodos de esta interfaz determinan si un bean se está ejecutando en modo de diseño. |
ExceptionListener | Se invoca un método en esta interfaz cuando se produce una excepción. |
PropertyChangeListener | Se invoca un método en esta interfaz cuando se cambia una propiedad vinculada. |
PropertyEditor | Los objetos que implementan esta interfaz permiten al diseñador cambiar y mostrar valores de propiedad. |
VetoableChangeListener | Se invoca un método en esta interfaz cuando se cambia una propiedad restringida. |
Visibilidad | Los métodos de esta interfaz permiten que un bean se ejecute en entornos donde la GUI no está disponible. |
Convenciones de JavaBean
Para funcionar como una clase JavaBean , una clase de objeto debe obedecer ciertas convenciones sobre el nombre, la construcción y el comportamiento de los métodos. Estas convenciones hacen posible tener herramientas que pueden usar, reutilizar, reemplazar y conectar Java Beans.
Las convenciones requeridas son las siguientes:
- La clase debe tener un constructor público predeterminado (sin argumentos). Esto permite una fácil creación de instancias dentro de los marcos de edición y activación.
- La clase propiedades deben ser accesibles usando get , set , está (se puede utilizar para propiedades booleanas en lugar de conseguir), a y otros métodos (los llamados métodos de acceso y métodos de mutador ) de acuerdo con un estándar de convención de nomenclatura . Esto permite una fácil inspección y actualización automatizada del estado del bean dentro de los marcos, muchos de los cuales incluyen editores personalizados para varios tipos de propiedades. Los establecedores pueden tener uno o más de un argumento.
- La clase debe ser serializable . (Esto permite que las aplicaciones y los marcos guarden, almacenen y restauren de manera confiable el estado del bean de una manera independiente de la máquina virtual y de la plataforma).
Ejemplo de código
reproductor de paquetes ;público de clase PersonBean implementos java . io . Serializable { / ** Propiedades ** / privado booleano fallecido = falso ; lista de lista privada ; / ** Propiedad "nombre", legible / escribible. * / nombre de cadena privada = nulo ; / ** Constructor sin argumentos (no acepta argumentos). * / public PersonBean () { } public List getList () { lista de retorno ; } setList public void ( lista de lista final ) { this . lista = lista ; } / ** * Getter para la propiedad "nombre". * / public String getName () { nombre de retorno ; } / ** * Setter para la propiedad "nombre". * * @param value * / public void setName ( valor de cadena final ) { this . nombre = valor ; } / ** * Getter para propiedad "fallecido" * Sintaxis diferente para un campo booleano (is vs get) * / public boolean isDeceased () { return fallecido ; } / ** * Setter para propiedad "fallecido". * @param value * / public void setDeceased ( valor booleano ) { fallecido = valor ; } }
TestPersonBean.java
:
import player.PersonBean ;/ ** * Clase "TestPersonBean". * / public class TestPersonBean { / ** * Método de prueba "main" para la clase "PersonBean". * * @param argumentos * / public static void main ( final String [] argumentos ) { final PersonBean person = new PersonBean (); persona . setName ( "Bob" ); persona . setDeceased ( falso ); persona . setList ( new ArrayList ()); // Salida: Sistema "Bob [vivo]" . fuera . imprimir ( persona . getName ()); Sistema . fuera . println ( person . isDeceased () ? "[fallecido]" : "[vivo]" ); } }
id = "person" class = "player.PersonBean" scope = "page" /> name = "person" property = "*" /> Nombre: name = "person" property = "name" />
¿Falleció? name = "person" property = "falleased" />
name = "beanTest" method = "POST" action = "testPersonBean.jsp" > Ingrese un nombre: type = "text" name = "name" size = "50" >
Elige una opcion: name = "fallecido" > value = "false" > Vivo value = "true" > Muerto type = "submit" value = "Prueba el Bean " >