Question Qu'est-ce qu'un JavaBean exactement?


J'ai compris, je pense, qu'un "Bean" est une classe Java avec des propriétés et des getters / setters. Autant que je comprends, c'est l'équivalent d'un C struct. Est-ce vrai?

Aussi, y a-t-il un réel syntaxique différence entre un haricot et une classe régulière? Y a-t-il une définition spéciale ou une interface?

Fondamentalement, pourquoi y a-t-il un terme pour cela?

modifier: Si vous pouvez être si gentil et ajouter des informations concernant la Serializable interface, et ce que cela signifie, à votre réponse, je serais très reconnaissant.


1361
2017-07-21 00:41


origine


Réponses:


Un JavaBean est juste un la norme

  1. Toutes les propriétés privées (utiliser getters / setters)
  2. Un public constructeur sans argument
  3. Met en oeuvre Serializable.

C'est tout. C'est juste une convention. Beaucoup de bibliothèques en dépendent cependant.

Par rapport à Serializable, du Documentation de l'API:

La sérialisabilité d'une classe est activée par la classe implémentant le   Interface java.io.Serializable. Les classes qui n'implémentent pas cette   l'interface n'aura aucun de leur état sérialisé ou désérialisé.   Tous les sous-types d'une classe sérialisable sont eux-mêmes sérialisables. le   interface de sérialisation n'a pas de méthodes ou des champs et sert uniquement à   identifier la sémantique d'être sérialisable.

En d'autres termes, les objets sérialisables peuvent être écrits dans des flux, et par conséquent des fichiers, des bases de données d'objets, n'importe quoi de vraiment.

De plus, il n'y a pas de différence syntaxique entre un JavaBean et une autre classe - une classe définit un JavaBean s'il suit les standards.

Il existe un terme car la norme permet aux bibliothèques de faire des choses par programme avec des instances de classe que vous définissez de manière prédéfinie. Par exemple, si une bibliothèque veut diffuser un objet que vous lui transmettez, elle le sait parce que votre objet est sérialisable (en supposant que la lib nécessite que vos objets soient des JavaBeans).


1496
2017-07-21 00:45



Il y a un terme pour que ça sonne spécial. La réalité est loin d'être si mystérieuse.

Fondamentalement, un "Bean":

  • est un objet sérialisable (c'est-à-dire qu'il met en œuvre java.io.Serializable, et le fait correctement), que
  • a des "propriétés" dont les getters et setters sont juste des méthodes avec certains noms (comme, disons, getFoo() est le getter pour la propriété "Foo"), et
  • a un constructeur public par défaut (donc il peut être créé à volonté et configuré en définissant ses propriétés).

Mettre à jour:

Pour ce qui est de Serializable: Ceci n'est rien d'autre qu'une "interface de marqueur" (une interface qui ne déclare aucune fonction) qui indique à Java que la classe d'implémentation consent (et implique qu'elle est capable) de "sérialiser" - un processus qui convertit une instance dans un flux d'octets. Ces octets peuvent être stockés dans des fichiers, envoyés sur une connexion réseau, etc, et ont assez d'informations pour permettre à une JVM (au moins, celle qui connaît le type de l'objet) de reconstruire l'objet plus tard - éventuellement dans une instance différente application, ou même sur toute une autre machine!

Bien sûr, pour ce faire, la classe doit respecter certaines limites. Le principal d'entre eux est que tous les champs d'instance doivent être des types primitifs (int, bool, etc), des instances de certaines classes qui sont également sérialisables, ou marqués comme transient pour que Java n'essaie pas de les inclure. (Cela signifie bien sûr que transient les champs ne survivront pas au voyage au-dessus d'un cours d'eau. Une classe qui a transient les champs doivent être préparés pour les réinitialiser si nécessaire.)

Une classe qui ne peut pas respecter ces limitations ne doit pas mettre en œuvre Serializable (et, IIRC, le compilateur Java ne sera même pas laisser il le fait.)


242
2017-07-21 00:50



Les JavaBeans sont des classes Java qui adhèrent à une convention de codage extrêmement simple. Tout ce que vous avez à faire est de

  1. Implémenter l'interface java.io.Serializable - Pour enregistrer l'état d'un objet
  2. utiliser un constructeur d'argument public vide - Pour instancier l'objet
  3. Et fournir des méthodes getter et setter publiques - Pour obtenir et définir les valeurs des variables privées (propriétés).

79
2017-07-21 04:22



Propriétés de JavaBeans

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

  1. La classe JavaBean doit implémenter soit Serializable ou Externalizable 

  2. La classe JavaBean doit avoir un constructeur sans-arg

  3. Toutes les propriétés JavaBean doivent avoir des méthodes setter et getter publiques

  4. Toutes les variables d'instance JavaBean doivent être privées

Exemple de JavaBeans

@Entity
public class Employee implements Serializable{

   @Id
   private int id;
   private String name;   
   private int salary;  

   public Employee() {}

   public Employee(String name, int salary) {
      this.name = name;
      this.salary = salary;
   }
   public int getId() {
      return id;
   }
   public void setId( int id ) {
      this.id = id;
   }
   public String getName() {
      return name;
   }
   public void setName( String name ) {
      this.name = name;
   }
   public int getSalary() {
      return salary;
   }
   public void setSalary( int salary ) {
      this.salary = salary;
   }
}

48
2018-01-24 09:33



Les Java Beans utilisent moins de code et plus de travail ... Les Java Beans sont utilisés dans Java EE comme un contrat universel pour la découverte et l'accès à l'exécution. Par exemple, JavaServer Pages (JSP) utilise Java Beans comme objets de transfert de données entre les pages ou entre les servlets et les pages JSP. Le JavaBeans Activation Framework de Java EE utilise Java Beans pour intégrer la prise en charge des types de données MIME dans Java EE. L'API Java EE Management utilise JavaBeans comme base pour l'instrumentation des ressources à gérer dans un environnement Java EE.

À propos de la sérialisation:

Dans la sérialisation d'objets, un objet peut être représenté comme une séquence d'octets qui inclut les données de l'objet, ainsi que des informations sur le type de l'objet et les types de données stockées dans l'objet.

Après qu'un objet sérialisé a été écrit dans un fichier, il peut être lu à partir du fichier et désérialisé, les informations de type et les octets qui représentent l'objet et ses données peuvent être utilisés pour recréer l'objet en mémoire.


18
2017-09-23 07:30



Vous trouverez la sérialisation utile lors du déploiement de votre projet sur plusieurs serveurs puisque les beans seront conservés et transférés entre eux.


17
2017-07-21 06:03



Explication avec un exemple.

1. import java.io.Serializable

En ce qui concerne la sérialisation, voir Documentation.

2. champs privés

Les champs doivent être privés pour empêcher les classes externes de modifier facilement ces champs. Au lieu d'accéder directement à ces champs, des méthodes getter / setter usuelles sont utilisées.

3. Constructeur

Un constructeur public sans argument.

4. getter / setter

Méthodes getter et setter pour l'accès aux champs privés.

/** 1. import java.io.Serializable */
public class User implements java.io.Serializable {
    /** 2. private fields */
    private int id;
    private String name;

    /** 3. Constructor */
    public User() {
    }
    public User(int id, String name) {
        this.id = id;
        this.name = name;
    }

    /** 4. getter/setter */
    // getter
    public int getId() {
        return id;
    }
    public String getName() {
        return name;
    }
    // setter
    public void setId(int id) {
        this.id = is;
    }
    public void setName(String name) {
        this.name = name;
    }
}

16
2017-08-22 12:45



Selon la Wikipédia:

  1. La classe doit avoir un constructeur public par défaut (sans arguments). Ceci permet une instanciation facile dans les cadres d'édition et d'activation.

  2. Les propriétés de classe doivent être accessibles en utilisant get, set, is (peut être utilisé pour les propriétés booléennes au lieu de get), et d'autres méthodes (méthodes dites accessor et mutator) selon une convention de dénomination standard. Cela permet une inspection et une mise à jour automatiques de l'état du bean dans les frameworks, dont beaucoup incluent des éditeurs personnalisés pour différents types de propriétés. Les setters peuvent avoir un ou plusieurs arguments.

  3. La classe devrait être sérialisable. [Ceci permet aux applications et aux frameworks d'enregistrer, stocker et restaurer de manière fiable l'état du bean indépendamment de la machine virtuelle et de la plate-forme.]

Pour plus d'informations, suivez cette lien.


9
2018-06-16 11:41