BEAN

JAVA BEANS

Los Beans son tipos especiales de POJOS. Hay algunas restricciones en POJO para que puedan ser Beans. Un Bean tiene que tener un constructor sin argumentos y tener todos los atributos privados con sus métodos getter y setter (aunque no es obligatorio que tengan ambos métodos, pero sí uno de los dos). Tienen que ser serializables para facilitar la persistencia.

  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
public class Bean implemenets Serializable {
    // private field property
    private Integer property;
    Bean() //public
    {
        // 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

¿Dónde está la gracia del JAVA BEAN?

Sin usar el BEAN

package com.fp.edu.es;

public class Usuario {
  public void insertaUsuario(String nombre, String, apellidos) {
    String sql= "INSERT INTO usuario (nombre, apellidos) VALUES ('"+nombre+"','"+apellidos+"')";
  }

  public static void main(String[] args) {
    //TODO lo que sea
  }
}

Usando el BeanUsuario

package com.fp.edu.es;

public class Usuario {
  public void insertaUsuario(BeanUsuario usr) {
    String sql= "INSERT INTO usuario (nombre, apellidos) VALUES ('"+usr.getNombre()+"','"+usr.getApellidos()+"')";
  }

  public static void main(String[] args) {

}

Si más adelante cambia la estructura de la clase Usuario, por ejemplo añadiendo un campo nuevo de edad, no tenemos que cambiar los parámetros de las llamadas.