¿Cuál es la diferencia entre un JavaBean y un POJO?

210

No estoy seguro de la diferencia. Estoy usando Hibernate y, en algunos libros, usan JavaBean y POJO como un término intercambiable. Quiero saber si hay una diferencia, no solo en el contexto de Hibernate, sino como conceptos generales.

DJphilomath
fuente

Respuestas:

252

Un JavaBean sigue ciertas convenciones. Nombramiento de getter / setter, tener un constructor público predeterminado, ser serializable, etc. Ver Convenciones JavaBeans para más detalles.

Un POJO (plain-old-Java-object) no está rigurosamente definido. Es un objeto Java que no tiene el requisito de implementar una interfaz particular o derivar de una clase base particular, o hacer uso de anotaciones particulares para ser compatible con un marco dado, y puede ser arbitrario (a menudo relativamente simple) Objeto Java

Brian Agnew
fuente
41
Tenga en cuenta que un JavaBean puede ser y generalmente es un POJO y muchos POJO son en realidad JavaBeans.
Joachim Sauer
8
No, según la definición de POJO, un Java Bean no es un POJO porque para ser considerado un Java Bean, una clase debe seguir ciertas convenciones de codificación (por ejemplo, tener un constructor sin argumentos, tener métodos que comiencen con las palabras "get" y / o "set") o se distribuirá con una clase BeanInfo.
Nat
15
Debido a que estas son convenciones , creo que puede argumentar con éxito que un bean puede ser un POJO (por ejemplo, no está heredando de una interfaz JavaBean o similar)
Brian Agnew
1
La especificación JavaBeans no puede definir un JavaBean que no sea muy vago como un "componente de software reutilizable" (o algo así). No tiene que tener un constructor sin argumentos, no necesita métodos que comiencen con "get" o "set", no necesita ser serializable, ni siquiera necesita ser una clase.
Tom Hawtin - tackline
44
En términos matemáticos, podemos decir que los Javabeans forman un subconjunto de POJO, porque las restricciones específicas impuestas a un POJO lo convierten en un Javabean.
Nishit
106

Todos los JavaBeans son POJO, pero no todos los POJO son JavaBeans.

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

  • la clase JavaBean debe implementar Serializable o Externalizable;
  • la clase JavaBean debe tener un constructor público sin argumentos;
  • todas las propiedades de JavaBean deben tener métodos públicos de establecimiento y obtención (según corresponda);
  • Todas las variables de instancia JavaBean deben ser privadas.
nagapavan
fuente
1
Pensé que los POJO no pueden implementar Serializable.
naXa
10
"la clase JavaBean debe tener un constructor sin argumentos;" también agregue público aquí
radistao
Un JavaBean es serializable y es por eso que un JavaBean NO es un POJO.
karlihnos
25

Según Martin Fowler, un POJO es un objeto que encapsula Business Logic, mientras que un Bean (a excepción de la definición ya establecida en otras respuestas) es poco más que un contenedor para almacenar datos y las operaciones disponibles en el objeto simplemente establecen y obtienen datos.

El término fue acuñado mientras Rebecca Parsons, Josh MacKenzie y yo nos estábamos preparando para una charla en una conferencia en septiembre de 2000. En la charla estábamos señalando los muchos beneficios de codificar la lógica empresarial en objetos Java normales en lugar de usar Entity Beans. Nos preguntamos por qué las personas estaban tan en contra del uso de objetos regulares en sus sistemas y concluimos que era porque los objetos simples carecían de un nombre elegante. Así que les dimos uno, y se puso muy de moda.

http://www.martinfowler.com/bliki/POJO.html

Esfigmomanómetro
fuente
7

POJO: si la clase se puede ejecutar con JDK subyacente, sin ninguna otra biblioteca externa externa compatible, entonces se llama POJO

JavaBean: si la clase solo contiene atributos con accesores (setters y getters), esos se denominan javabeans. Los beans de Java generalmente no contendrán ninguna lógica de negocios, sino que se usarán para contener algunos datos.

Todos los Javabeans son POJOs pero todos los POJO no son Javabeans

prasad paluru
fuente
7

Pojo - Objeto java antiguo simple

La clase pojo es una clase ordinaria sin ninguna especialidad, una clase totalmente acoplada libremente de tecnología / marco. La clase no se implementa desde tecnología / marco y no se extiende desde la tecnología / marco api, esa clase se llama clase pojo.

La clase pojo puede implementar interfaces y extender clases, pero la superclase o interfaz no debe ser una tecnología / marco.

Ejemplos:

1)

class ABC{
----
}

La clase ABC no se implementa o se extiende desde la tecnología / marco, por eso esta es una clase pojo.

2)

class ABC extends HttpServlet{
---
}

La clase ABC se extiende desde la API de tecnología de servlet por eso esta no es una clase pojo.

3)

class ABC implements java.rmi.Remote{
----
}

La clase ABC se implementa desde rmi api, por eso esta no es una clase pojo.

4)

class ABC implements java.io.Serializable{
---
}

esta interfaz es parte del lenguaje java, no parte de la tecnología / framework.so es una clase pojo.

5)

class ABC extends Thread{
--
}

aquí el hilo también es una clase de lenguaje java, por lo que también es una clase pojo.

6)

class ABC extends Test{
--
}

si la clase Test se extiende o implementa desde tecnologías / framework, ABC tampoco es una clase pojo porque hereda las propiedades de la clase Test. si la clase Test no es una clase pojo, entonces la clase ABC tampoco es una clase pojo.

7)

ahora este punto es un caso excepcional

@Entity
class ABC{
--
}

@Entityes una anotación dada por hibernate api o jpa api pero aún así podemos llamar a esta clase como clase pojo. clase con anotaciones dadas por la tecnología / marco se llama clase pojo por este caso excepcional.

Gill Mandeep
fuente
2

Los beans de Java son un tipo especial de POJO.

Especialidades enumeradas a continuación con razón

ingrese la descripción de la imagen aquí

Jeril Kuruvila
fuente
1

POJOScon ciertas convenciones (getter / setter, constructor público sin argumentos, variables privadas) y están en acción (por ejemplo, se utilizan para leer datos por formulario) JAVABEANS.


fuente
1

En resumen: las similitudes y diferencias son:

   java beans:                          Pojo:
-must extends serializable              -no need to extends or implement.
 or externalizable.                     
-must have public class .               - must have public class
-must have private instance variables.      -can have any access specifier variables.
-must have public setter and getter method. - may or may not have setter or getter method.
-must have no-arg constructor.           - can have constructor with agruments.

Todos los frijoles JAVA son POJO, pero no todos los POJO son frijoles JAVA.

ishab acharya
fuente
0

Has visto las definiciones formales anteriores, por todo lo que valen.

Pero no te obsesiones con las definiciones. Veamos más sobre el sentido de las cosas aquí.

Los JavaBeans se usan en aplicaciones Java empresariales, donde los usuarios acceden frecuentemente a datos y / o código de aplicaciones de forma remota, es decir, desde un servidor (a través de la red web o privada) a través de una red. Por lo tanto, los datos involucrados deben transmitirse en formato serial dentro o fuera de las computadoras de los usuarios, de ahí la necesidad de que los objetos Java EE implementen la interfaz Serializable. Esta gran parte de la naturaleza de JavaBean no es diferente de los objetos de aplicación Java SE cuyos datos se leen o escriben en un sistema de archivos. El uso de clases Java de manera confiable a través de una red desde una gama de combinaciones de máquina / sistema operativo del usuario también exige la adopción de convenciones para su manejo. De ahí el requisito de implementar estas clases como públicas, con atributos privados, un constructor sin argumentos y getters y setters estandarizados.

Las aplicaciones Java EE también utilizarán clases distintas de las que se implementaron como JavaBeans. Estos podrían usarse para procesar datos de entrada u organizar datos de salida, pero no se usarán para objetos transferidos a través de una red. Por lo tanto, las consideraciones anteriores no necesitan aplicarse a ellos, salvo que sean válidos como objetos Java. Estas últimas clases se denominan POJOs - Objetos Java simples y sencillos.

Con todo, podría ver Java Beans como solo objetos Java adaptados para su uso en una red.

Hay una gran cantidad de publicidad, y no una pequeña cantidad de embaucamiento, en el mundo del software desde 1995.

Maletero
fuente