¿Cuál es la diferencia entre un POJO y un Bean en Java? – java poo object

Pregunta:


He visto mucha similitud entre estos dos conceptos. Los dos tienen atributos protegidos y clases simples. Pero desearía saber cuál es su diferencia

Preguntado por: Brian Martínez

A. Cedano

POJO

POJO significa Plain Old Java Object. Se trata de un objeto Java común, no vinculado por ninguna restricción especial que no sea forzada por la especificación de lenguaje Java y que no requiera ninguna ruta de clase. POJOs se utilizan para aumentar la legibilidad y la reutilización de un programa. POJOs han ganado la mayoría de la aceptación porque son fáciles de escribir y de entender. Se introdujeron en EJB 3.0 por microsistemas Sun.

Un POJO no debe contener lo siguiente:

  • Extender clases preespecificadas, Ej: public class GFG extends javax.servlet.http.HttpServlet {...} no es una clase POJO.

  • Implementar interfaces preespecificadas, Ej: public class Bar implements javax.ejb.EntityBean {...} no es una clase POJO.

  • Anotaciones preespecificadas, Ej: @javax.persistence.Entity public class Baz {...} no es una clase POJO.

POJOs básicamente define una entidad. Si en tu programa deseas una clase de empleado, entonces puedes crear un POJO de la siguiente manera:

// Employee POJO clase que representa una entidad empleado
public class Employee
{
    // campo por defecto
    String name;

    // campo público
    public String id;

    // salario privado
    private double salary;

    //constructor para inicializar los campos
    public Employee(String name, String id, 
                             double salary)
    {
        this.name = name;
        this.id = id;
        this.salary = salary;
    }

    // getters
    public String getName()
    {
        return name;
    }

    public String getId()
    {
        return id;
    }

    public Double getSalary()
    {
        return salary;
    }
}

El ejemplo anterior es un ejemplo bien definido de la clase POJO. Como puede ver, no hay restricción sobre el acceso-modificador de los campos. Pueden ser privados, predeterminados, protegidos o públicos. Tampoco es necesario incluir ningún constructor en él.

POJO es un objeto que encapsula la lógica de negocio (Business Logic). La siguiente imagen muestra un ejemplo práctico de la clase POJO. Los controladores interactúan con su lógica de negocio, que a su vez interactúan con POJO para acceder a la base de datos. En este ejemplo, una entidad de base de datos está representada por POJO. Este POJO tiene los mismos miembros que la entidad de la base de datos.

introducir la descripción de la imagen aquí


BEANS

Los Beans son tipos especiales de POJOS. Hay algunas restricciones en POJO para que puedan ser Beans.

  1. Todos los JavaBeans son POJO pero no todos los POJOs son JavaBeans.
  2. Serializables, es decir, deben implementar la interfaz Serializable. Aún algunos POJOs que no implementan interfaz Serializable se llaman POJOs porque Serializable es una interfaz de marcadores y por lo tanto no de mucha carga.
  3. Los campos deben ser privados. Esto es para proporcionar el control completo en los campos.
  4. Los campos deben tener getters o setters o ambos.
  5. Un constructor no-arg puede existir en un bean.
  6. Se accede a los campos sólo por constructor o getter o setters.

Los Getters y Setters tienen algunos nombres especiales dependiendo del nombre del campo. Por ejemplo, si el nombre de campo es someProperty entonces su getter preferiblemente será:

public void getSomeProperty()
{
   return someProperty;
} 

y el setter se llamará:

public void setSomePRoperty(someProperty)
{
   this.someProperty=someProperty;
}

La visibilidad de getters y setters en general es pública. Getters y setters proporcionan la restricción completa en los campos.

Si establece la visibilidad de la edad en público, entonces cualquier objeto puede usarla. Supongamos que desea que la edad no puede ser 0. En ese caso, no puede tener control. Cualquier objeto puede establecerla a 0. Pero utilizando el método setter, se tiene control. Usted puede tener una condición en su método de setter. Del mismo modo, para el método getter, si desea que si su edad es 0, entonces debería devolver null, puede lograr esto mediante el método getter como en el siguiente ejemplo:

// Java program to illustrate JavaBeans
class Bean
{
    // private field property
    private Integer property;
    Bean()
    {
        // No-arg constructor
    }

    // setter method for property
    public void setProperty(Integer property)
    {
        if (property == 0)
        {
            // if property is 0 return
            return;
        }
        this.property=property;
    }

    // getter method for property
    public int getProperty()
    {
        if (property == 0)
        {
            // if property is 0 return null
            return null;
        }
        return property;
    }
}

// Class to test above bean
public class GFG
{
    public static void main(String[] args)
    {
        Bean bean = new Bean();

        bean.setProperty(0);
        System.out.println("After setting to 0: " +
                                 bean.getProperty());

        bean.setProperty(5);
        System.out.println("After setting to valid" +
                      " value: " + bean.getProperty());
    }
}

Resultado:

After setting to 0: null
After setting to valid value: 5

CONCLUSIÓN

Las clases POJO y Beans se utilizan para definir objetos Java para aumentar su legibilidad y reutilización. POJOs no tienen otras restricciones mientras que los Beans son POJOs especiales con algunas restricciones.


Fuente: POJO vs Java Beans (ver al final una interesante tabla comparativa).

La únicas diferencias notables es que
un Java Bean puede ser serializado (aunque no se encuentra en la especificación) y un POJO únicamente puede heredar de un Object.

POJO:

son las iniciales de “Plain Old Java Object”, un POJO es una
instancia de una clase que no extiende ni implementa nada en especial.
Para los programadores Java sirve para enfatizar el uso de clases
simples y que no dependen de un framework en especial. Este concepto
surge en oposición al modelo planteado por los estándares EJB
anteriores al 3.0, en los que los Enterprise JavaBeans (EJB) debían
implementar interfaces especiales.

Bean (JavaBean):

es una clase simple en Java que cumple con ciertas
normas con los nombres de sus propiedades y métodos.

Un JavaBean debe tener un constructor sin argumentos, tiene declarados
todos sus atributos como privados y para cada uno de ellos un método
setter y getter, añadiéndole la palabra “set” o “get” al nombre del
atributo y deben ser serializables. Mediante estos JavaBeans,
desarrollamos nuestro modelo de objetos (o modelo de dominio) para la
aplicación.

Ejemplo:

public class MiBean implements java.io.Serializable {

   private int edad;
   private String nombre;

   //Constructor 
   public MiBean () {

   }

   public int getEdad() {
     return edad;
   }

   public void setEdad(int edad) {
     this.edad = edad;
   }

   public String getNombre() {
     return nombre;
   }

   public void setNombre(String nombre) {
     this.nombre = nombre;
   }

}

Te sugiero revises este documento para mayor información: “Diferencia Java Bean vs POJO”
y la especificación JavaBeans.

Definición POJO (Wikipedia):

Definición JavaBean (Wikipedia):

Un bean en Java se define en la especificación JavaBeans:

“A Java Bean is a reusable software component that can be manipulated visually in a builder tool.”

Traducido a español:

“Un Bean Java es un componente reusable de software que puede ser manipulado visualmente por una herramienta de desarrollo.”

Se definen más elementos para un bean como la nomenclatura de atributos y métodos, los métodos de acceso a los atributos, el soporte a eventos, entre otros.

POJO hace referencia a Plain Old Java Object. Esto se refiere a una clase con atributos privados o protegidos y que solo provee métodos getter y setter protegidos o públicos para acceder a los atributos. Similar a cuando defines una entidad. Un POJO es un JavaBean mientras que un JavaBean no necesariamente es un POJO.

Hola mira creo que esto puede ayudar a tu pregunta y como diferenciarlos 🙂
http://carlospesquera.com/que-es-un-pojo-ejb-y-un-bean/

Fuente

Related Posts:

Tomcat no encuentra los recursos – java angularjs http
Pregunta: Bueno tengo una aplicación con AngularJS que hace peticiones al API de gitHub como un ejemplo para aprender a usar AngularJS, pero el problema ...
Crear cuenta regresiva N segundos mientras se visualiza una Activity en Android – java android
Pregunta: Quiero implementar una cuenta regresiva de N segundos, que se inicie cuando la Activity se muestre, se pare el contador cuando el usuario decide ...
¿Es legal leer imágenes y descripciones de otro sitio web y ponerlas en mi app? – java woocommerce
Pregunta: ¿Es legal leer imágenes y descripciones de otro sitio web y ponerlas en mi programa? Supongamos que quiero hacer una aplicación como la de ebay, ...
Problema con consulta JPQL + JPA + JSF + EJB – java jsf jpa
Pregunta: @Override public Usuario iniciarSesion(Usuario us){ Usuario usuario = null; String consulta; try { ...
No encuentra el audio dentro de src – java
Pregunta: Tengo una carpeta "audios" dentro de "src", para cuando construya el proyecto pueda reproducir los audios. Intento abrir el audio pero me salta "java.lang.NullPointerException" ...
¿Como saber con Apache POI y java si una columna en excel esta oculta? – java apache-poi
Pregunta: Hola estoy importando archivos excel con extensión xls y xlsx pero mi duda es como poder detectar si la columna de una celda esta ...
Spinner y EditText – java android
Pregunta: Tengo este código para cargar un spinner con datos de una base de datos: private class Getfrutas extends AsyncTask<Void, Void, Void> { ...
¿Cómo enviar datos de una pagina JSP a un Servlet sin un form? – java jsp java-ee
Pregunta: Tengo un problema. No logro recibir un valor por GET en el Servlet, no se por qué. Aquí el código JSP: <html> ...
Ayuda con un Calendario en Linea de Codigo – java
Pregunta: Pues se supone que mi código debería imprimir en algunos meses 31 días según una de mis condiciones pero no lo hace de hecho ...
¿ Por qué se me detiene la aplicación al usar este pequeño código? – java android bottombar
Pregunta: Tengo un bottomBar donde tengo 5 opciones, la última es la del mapa de google API. Mi problema es que al hacer click en ...
Exception java.lang.NumberFormatException al intentar un “.size” dentro de una EL – java jsp jboss
Pregunta: Estoy teniendo una Exception en el siguiente código dentro de un jsp: <c:if test="${usuarios.size gt 10}"> usuarios es un ArrayList que objetos. usuarios no esta vacío ya ...
¿ Cómo implemento este código para android 6.0? – java android
Pregunta: Tengo en un Fragment implementado el Google API y FUNCIONA. Pero funciona en mis 3 móviles que son jellybean, kitkat y lollipop. El ...
Algoritmo de Bresenham, duda con la codificación de los 8 octantes – java matemáticas
Pregunta: En la imagen de arriba muestra todos los cuadrantes de la pantalla: Este algoritmo sirve para el movimiento natural de la pelota, usado en juegos ...
¿Cómo guardar un ImageView en Android? – java android
Pregunta: Mi aplicación está compuesta por un botón y un ImageView y cuando se aprieta el botón la ImageView recibe una imagen que tengo en ...
Error “no match operator[]” al introducir datos en un map dentro de un objeto – c++ map object
Pregunta: Estoy tratando de guardar datos en un mapa dentro de un objeto y recibo este error en var=val y en var: no match ...
Tags:, ,

Add a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *