web-dev-qa-db-fra.com

Quelle est la différence entre un JavaBean et un POJO?

Je ne suis pas sûr de la différence. J'utilise Hibernate et, dans certains livres, JavaBean et POJO sont interchangeables. Je veux savoir s'il y a une différence, pas seulement dans le contexte d'Hibernate, mais en tant que concepts généraux.

188
DJphilomath

Un JavaBean suit certaines conventions. Désignation des accesseurs/configurateurs, avoir un constructeur par défaut public, être sérialisable, etc. Voir Conventions JavaBeans pour plus de détails.

Un POJO (objet Java ancien) n'est pas défini de manière rigoureuse. C’est un objet Java qui n’exige pas d’implémenter une interface particulière ni de dériver d’une classe de base particulière, ni d’utiliser des annotations particulières pour être compatible avec un cadre donné. Objet Java.

240
Brian Agnew

Tous les JavaBeans sont des POJO, mais tous ne sont pas des JavaBeans.

Un JavaBean est un objet Java qui respecte certaines conventions de programmation:

  • la classe JavaBean doit implémenter Serializable ou Externalizable;
  • la classe JavaBean doit avoir un constructeur public no-arg;
  • toutes les propriétés JavaBean doivent avoir des méthodes publiques de définition et d'acquisition (selon le cas);
  • toutes les variables d'instance JavaBean doivent être privées.
97
nagapavan

Selon Martin Fowler, un POJO est un objet qui encapsule la logique métier tandis qu'un bean (à l'exception de la définition déjà mentionnée dans d'autres réponses) n'est guère plus qu'un conteneur pour stocker des données et que les opérations disponibles sur l'objet se contentent de définir et d'obtenir des données.

Le terme a été inventé alors que Rebecca Parsons, Josh MacKenzie et moi étions préparer une conférence lors d’une conférence en septembre 2000. Dans la conférence, nous soulignaient les nombreux avantages de l’encodage de la logique d’entreprise dans objets Java classiques plutôt que d'utiliser Entity Beans. Nous nous sommes demandé pourquoi les gens étaient tellement contre l'utilisation d'objets normaux dans leurs systèmes et a conclu que c’était parce que les objets simples n’avaient pas un nom sophistiqué. Alors nous leur en avons donné un, et cela a bien fonctionné.

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

20
Sphygmomanometer

POJO: Si la classe peut être exécutée avec le JDK sous-jacent, sans aucune autre bibliothèque tierce externe, alors elle est appelée POJO.

JavaBean: Si la classe ne contient que des attributs avec des accesseurs (setters et getters), ceux-ci s'appellent javabeans.Les beans Java ne contiennent généralement pas de logique de gestion, mais sont utilisés pour contenir des données.

Tous les Javabéens sont des POJO, mais tous les POJO ne sont pas des Javabéens.

6
prasad paluru

Pojo - Objet Java ancien et simple

la classe pojo est une classe ordinaire sans aucune spécialité, une classe totalement couplée de manière non souple à une technologie/un framework. La classe n'implémente pas une technologie/un framework et ne s'étend pas de la technologie/un framework. Cette classe s'appelle une classe de pojo.

la classe pojo peut implémenter des interfaces et étendre des classes mais la super classe ou interface ne doit pas être une technologie/un framework.

Exemples : 

1.

class ABC{
----
}

La classe ABC n’implémente pas ou n’est pas une technologie/un framework, c’est pourquoi il s’agit d’une classe pojo.

2.

class ABC extends HttpServlet{
---
}

La classe ABC s’étendant de la technologie servlet api, c’est pourquoi ce n’est pas une classe pojo.

3.

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

La classe ABC implémente à partir de rmi api c'est pourquoi ce n'est pas une classe pojo.

4.

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

cette interface fait partie du langage Java et non de technology/framework.so, il s'agit de la classe pojo.

5.

class ABC extends Thread{
--
}

ici le fil est aussi une classe de langage Java, donc c'est aussi une classe pojo.

6.

class ABC extends Test{
--
}

si la classe Test est étendue ou implémentée à partir de technologies/framework, alors ABC n'est pas non plus une classe pojo car elle hérite des propriétés de la classe Test . Si la classe Test n'est pas une classe pojo, la classe ABC n'est pas non plus une classe pojo.

7.

maintenant ce point est un cas exceptionnel

@Entity
class ABC{
--
}

@Entity est une annotation donnée par hibernate api ou jpa api, mais nous pouvons néanmoins appeler cette classe classe pojo . classe avec des annotations issues de la technologie/framework est appelée classe pojo par ce cas exceptionnel.

5
Mandeep Gill

POJOS avec certaines conventions (getter/setter, constructeur public no-arg, variables privées) et qui sont en action (par exemple, utilisé pour la lecture de données par formulaire) sont JAVABEANS.

1
user4768611

En résumé: les similitudes et les différences sont:

   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.

Tous les Java Beans sont des POJO, mais tous les POJO ne sont pas des Java Beans.

0
ishab acharya

Vous avez vu les définitions officielles ci-dessus, pour tout ce qu'elles valent.

Mais ne vous attardez pas trop sur les définitions .. Regardons plutôt lesensdes choses ici.

Les JavaBeans sont utilisés dans les applications Enterprise Java, où les utilisateurs accèdent fréquemment aux données et/ou au code de l’application à distance, c’est-à-dire depuis un serveur (via un réseau Web ou privé) via un réseau. Les données concernées doivent donc être transférées au format série sur les ordinateurs des utilisateurs, au format série. D'où la nécessité pour les objets Java EE d'implémenter l'interface Serializable. Cette nature de JavaBean n’est pas différente des objets d’application Java SE dont les données sont lues ou écrites dans un système de fichiers . Utilisation fiable des classes Java sur un réseau à partir de diverses combinaisons ordinateur/système d’exploitation utilisateur exige l’adoption de conventions pour leur traitement. D'où la nécessité d'implémenter ces classes en tant que public, avec des attributs privés, un constructeur sans argument et des getters et des setters normalisés.

Les applications Java EE utiliseront également des classes autres que celles implémentées en tant que JavaBeans. Celles-ci pourraient être utilisées pour le traitement des données d'entrée ou l'organisation des données de sortie, mais ne seront pas utilisées pour les objets transférés sur un réseau. Par conséquent, il n’est pas nécessaire de leur appliquer les considérations ci-dessus, sauf si elles sont valables en tant qu’objets Java. Ces dernières classes sont appelées POJOs - Plain Old Java Objects.

Dans l’ensemble, vous pouvez voir les Java Beans comme de simples objets Java adaptés à une utilisation sur un réseau.

Depuis 1995, le monde des logiciels suscite énormément de battage publicitaire - et pas mal de bêtises. 

0
Trunk