72 votes

Comment créer un POJO ?

Récemment, j'ai commencé à entendre parler des "POJOs" (Plain Old Java Objects). J'ai cherché sur Google, mais je ne comprends toujours pas bien le concept. Est-ce que quelqu'un pourrait me donner une description claire d'un POJO?

Considérons une classe "Personne" avec les variables "id, nom, adresse, salaire" -- comment créerais-je un POJO pour ce scénario? Est-ce que le code ci-dessous est un POJO?

public class Person {
    //variables
    People people = new People();
    private int id;
    private String name;
    private String address;
    private int salary;

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getAddress() {
        return address;
    }

    public int getSalary() {
        return salary;
    }

    public void setId() {
        this.id = id;
    }

    public void setName() {
        this.name = name;
    }

    public void setAddress() {
        this.address = address;
    }

    public void setSalary() {
        this.salary = salary;
    }
}

1 votes

Découvrez ma réponse à une question similaire : stackoverflow.com/questions/3392580/…. Cela concerne les POCO (.NET version des POJOS), mais les fondements sont les mêmes.

0 votes

@Tamil peux-tu m'expliquer une fois de plus. à propos de pojo

0 votes

@Poovizhirajan.N, désolé pour ce long retard. J'ai d'une manière ou d'une autre manqué cela.

85voto

duffymo Points 188155

Un POJO est simplement un bean Java ordinaire sans les restrictions. Les Java Beans doivent respecter les exigences suivantes :

  1. Constructeur par défaut sans arguments
  2. Suivre la convention des Beans en ayant des méthodes getFoo (ou isFoo pour les booléens) et setFoo pour un attribut mutable nommé foo ; laisser de côté le setFoo si foo est immuable.
  3. Doit implémenter java.io.Serializable

POJO ne mandate aucune de ces exigences. C'est juste ce que le nom indique : un objet qui compile sous JDK peut être considéré comme un Plain Old Java Object. Aucun serveur d'application, aucune classe de base, aucune interface n'est nécessaire.

L'acronyme POJO était une réaction contre EJB 2.0, qui nécessitait plusieurs interfaces, des classes de base étendues, et beaucoup de méthodes juste pour faire des choses simples. Certaines personnes, dont Rod Johnson et Martin Fowler, ont protesté contre la complexité et ont cherché un moyen de mettre en œuvre des solutions à grande échelle sans avoir à écrire des EJBs.

Martin Fowler a inventé un nouvel acronyme.

Rod Johnson a écrit "J2EE Without EJBs", a écrit Spring, a influencé EJB au point que la version 3.1 ressemble beaucoup à Spring et Hibernate, et a obtenu une belle IPO de VMWare grâce à cela.

Voici un exemple sur lequel vous pouvez réfléchir:

public class MyFirstPojo
{
    private String name;

    public static void main(String [] args)
    {
       for (String arg : args)
       {
          MyFirstPojo pojo = new MyFirstPojo(arg);  // Voici comment vous créez un POJO
          System.out.println(pojo); 
       }
    }

    public MyFirstPojo(String name)
    {    
        this.name = name;
    }

    public String getName() { return this.name; } 

    public String toString() { return this.name; } 
}

0 votes

Je n'aurai plus jamais ce doute. Merci.

16 votes

Certains peuvent comprendre les démonstrations pratiques plus rapidement que par la lecture. Je suis l'un d'entre eux.

0 votes

Votre exemple particulier est immutable, mais d'autres sont mutables. Avez-vous simplement fait le vôtre immutable par hasard ? Y a-t-il une distinction entre les POJOs qui contiennent des références non partagées vers des objets mutables dans le but d'encapsuler leur état, et ceux qui contiennent des références identifiant des objets mutables auxquels existent également d'autres références, dans le but d'encapsuler leur identité ?

29voto

POJO:- POJO est un objet Java non lié par aucune restriction autre que celles imposées par la spécification du langage Java.

Propriétés de POJO

  1. Toutes les propriétés doivent être des méthodes setter et getter publiques
  2. Toutes les variables d'instance doivent être privées
  3. Ne doit pas étendre des classes prédéfinies
  4. Ne doit pas implémenter des interfaces prédéfinies
  5. Ne doit pas contenir d'annotations prédéfinies
  6. Il ne peut pas avoir de constructeurs avec arguments

Exemple de POJO

public class POJO {

    private String value;

    public String getValue() {
         return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
}

0 votes

1, #2 contredit la définition sur wikipedia. fr.wikipedia.org/wiki/Plain_Old_Java_Object#Definition. Vous décrivez un "JavaBean POJO" (un terme que je trouve être un oxymore, mais c'est juste mon avis)

5voto

Blair Conrad Points 56195

Un POJO est un Plain Old Java Object.

De l'article de Wikipédia que j'ai lié :

En informatique, POJO est un acronyme pour Plain Old Java Object. Le nom est utilisé pour souligner qu'un objet donné est un objet Java ordinaire, pas un objet spécial, et en particulier pas un Enterprise JavaBean

Votre classe semble déjà être un POJO.

4voto

Subodh Points 176

La classe POJO agit comme un bean qui est utilisé pour définir et obtenir la valeur.

public class Data
{

private int id;
    private String deptname;
    private String date;
    private String name;
    private String mdate;
    private String mname;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getDeptname() {
        return deptname;
    }

    public void setDeptname(String deptname) {
        this.deptname = deptname;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getMdate() {
        return mdate;
    }

    public void setMdate(String mdate) {
        this.mdate = mdate;
    }

    public String getMname() {
        return mname;
    }

    public void setMname(String mname) {
        this.mname = mname;
    }
}

2voto

Jon Hanna Points 40291

Lorsque vous ne faites rien pour que votre classe soit spécifiquement conçue pour fonctionner avec un framework donné, un ORM ou un autre système nécessitant un type spécial de classe, vous avez un Plain Old Java Object, ou POJO.

Ironiquement, l'une des raisons d'avoir inventé ce terme est que les gens les évitaient dans des cas où ils étaient sensibles et certaines personnes ont conclu que c'était parce qu'ils n'avaient pas de nom fantaisiste. Ironique, car votre question démontre que l'approche a fonctionné.

Comparez l'ancien POD "Plain Old Data" qui signifie une classe C++ qui ne fait rien qu'une structure C ne pourrait pas faire (plus ou moins, les membres non virtuels qui ne sont pas des destructeurs ou des constructeurs triviaux ne l'empêchent pas d'être considéré comme POD), et le plus récent (et plus directement comparable) POCO "Plain Old CLR Object" dans .NET.

0 votes

Merci pour votre réponse, aîné. Mais je voudrais une explication pratique.

0 votes

Tu veux une explication pratique de la nomenclature pour "pas spéciale"? Vraiment?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X