java - tag - servlet jsp mvc




Cosa è esattamente un JavaBean? (10)

Ho capito, penso, che un "Bean" è una classe Java con proprietà e getter / setter. Per quanto ho capito, è l'equivalente di una struttura C. È vero?

Inoltre, c'è una vera differenza sintattica tra un bean e una classe regolare? C'è qualche definizione speciale o un'interfaccia?

Fondamentalmente, perché c'è un termine per questo?

Modifica : Se puoi essere così gentile e aggiungere informazioni riguardanti l'interfaccia Serializable , e cosa significa, per la tua risposta, sarei molto grato.


C'è un termine per farlo sembrare speciale. La realtà non è affatto così misteriosa.

In sostanza, un "fagiolo":

  • è un oggetto serializzabile (cioè, implementa Serializable e lo fa correttamente), quello
  • ha "proprietà" i cui getter e setter sono solo metodi con determinati nomi (come, per esempio, getFoo() è il getter per la proprietà "Foo"), e
  • ha un costruttore pubblico di 0-arg (quindi può essere creato a piacimento e configurato impostando le sue proprietà).

Aggiornare:

Per quanto riguarda Serializable : Questo non è altro che una "interfaccia marker" (un'interfaccia che non dichiara alcuna funzione) che dice a Java che la classe di implementazione consente (e implica che sia in grado di) "serializzazione" - un processo che converte un'istanza in un flusso di byte. Questi byte possono essere archiviati in file, inviati tramite una connessione di rete, ecc. E avere informazioni sufficienti per consentire a una JVM (almeno una che conosce il tipo dell'oggetto) di ricostruire l'oggetto in un secondo momento - possibilmente in una diversa istanza del applicazione, o anche su un'altra macchina!

Naturalmente, per fare ciò, la classe deve rispettare certi limiti. Il principale tra questi è che tutti i campi di istanza devono essere di tipo primitivo (int, bool, ecc.), Istanze di alcune classi che sono anche serializzabili o contrassegnate come transient modo che Java non tenti di includerle. (Questo ovviamente significa che i campi transient non sopravviveranno al viaggio su uno stream. Una classe con campi transient dovrebbe essere pronta a reinizializzarli se necessario).

Una classe che non può rispettare queste limitazioni non dovrebbe implementare Serializable (e, IIRC, il compilatore Java non lo lascerà nemmeno fare).


I bean Java stanno usando meno codice e più approccio al lavoro ... I bean Java sono usati in Java EE come contratto universale per il rilevamento e l'accesso runtime. Ad esempio, JavaServer Pages (JSP) utilizza Java Beans come oggetti di trasferimento dati tra le pagine o tra servlet e JSP. JavaBeans Activation Framework di Java EE utilizza Java Beans per integrare il supporto per i tipi di dati MIME in Java EE. L'API Java EE Management utilizza JavaBeans come base per la strumentazione delle risorse da gestire in un ambiente Java EE.

Informazioni sulla serializzazione:

Nella serializzazione dell'oggetto un oggetto può essere rappresentato come una sequenza di byte che include i dati dell'oggetto, nonché informazioni sul tipo dell'oggetto e i tipi di dati memorizzati nell'oggetto.

Dopo che un oggetto serializzato è stato scritto in un file, può essere letto dal file e deserializzato cioè, le informazioni sul tipo e i byte che rappresentano l'oggetto ei suoi dati possono essere utilizzati per ricreare l'oggetto in memoria.


JavaBeans sono classi Java che aderiscono a una convenzione di codifica estremamente semplice. Tutto quello che devi fare è farlo

  1. Implementare l'interfaccia java.io.Serializable - Per salvare lo stato di un oggetto
  2. usa un costruttore di argomenti vuoto pubblico - Per istanziare l'oggetto
  3. E fornire metodi pubblici getter e setter - Per ottenere e impostare i valori delle variabili private (proprietà).

La serializzazione è utile quando si distribuisce il progetto su più server poiché i bean verranno mantenuti e trasferiti su di essi.


Per quanto riguarda la seconda parte della domanda, la serializzazione è un meccanismo di persistenza utilizzato per memorizzare oggetti come una sequenza di byte firmati. Metti meno formalmente, memorizza lo stato di un oggetto in modo che tu possa recuperarlo in un secondo momento, mediante la deserializzazione.


Proprietà di JavaBeans

Un JavaBean è un oggetto Java che soddisfa determinate convenzioni di programmazione:

  1. La classe JavaBean deve implementare Serializable o Externalizable

  2. La classe JavaBean deve avere un costruttore no-arg

  3. Tutte le proprietà JavaBean devono avere metodi setter e getter pubblici

  4. Tutte le variabili di istanza JavaBean devono essere private

Esempio di 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;
   }
}

Sono serializzabili, hanno un costruttore di argomenti zero e consentono l'accesso alle proprietà usando i metodi getter e setter. Il nome "Bean" è stato dato per comprendere questo standard, che mira a creare componenti software riutilizzabili per Java. according to wiki

Gli oggetti che formano la spina dorsale della tua applicazione e che sono gestiti dal contenitore IoC di primavera sono chiamati bean. Un bean è un oggetto che viene istanziato, assemblato e gestito in altro modo da un contenitore IoC di primavera. Altrimenti, un bean è semplicemente uno dei tanti oggetti nella tua applicazione. according to primavera io .


Spiegazione con un esempio.

1. import java.io.Serializable

Per quanto riguarda la serializzazione, consultare la Serializable .

2. campi privati

I campi dovrebbero essere privati ​​per impedire alle classi esterne di modificare facilmente quei campi. Invece di accedere direttamente a quei campi, vengono utilizzati i metodi usualmente getter / setter.

3. Costruttore

Un costruttore pubblico senza argomenti.

4. getter / setter

Metodi Getter e setter per l'accesso ai campi privati.

/** 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;
    }
}

Un JavaBean è solo uno standard

  1. Tutte le proprietà private (usa getters/setters )
  2. Un costruttore pubblico senza argomenti
  3. Attrezzi Serializable .

Questo è tutto. È solo una convenzione. Molte librerie dipendono da questo però.

Per quanto riguarda Serializable , dalla Serializable :

La serializzabilità di una classe è abilitata dalla classe che implementa l'interfaccia java.io.Serializable. Le classi che non implementano questa interfaccia non avranno nessuno stato serializzato o deserializzato. Tutti i sottotipi di una classe serializzabile sono anch'essi serializzabili. L'interfaccia di serializzazione non ha metodi o campi e serve solo a identificare la semantica di essere serializzabile.

In altre parole, gli oggetti serializzabili possono essere scritti su flussi e quindi file, database di oggetti, qualsiasi cosa realmente.

Inoltre, non vi è alcuna differenza sintattica tra un JavaBean e un'altra classe - una classe definisce un JavaBean se segue gli standard.

Esiste un termine per questo perché lo standard consente alle librerie di fare cose a livello di codice con istanze di classe definite in modo predefinito. Ad esempio, se una libreria desidera eseguire lo streaming di qualsiasi oggetto che gli passi, sa che può farlo perché il tuo oggetto è serializzabile (assumendo che la lib richieda che gli oggetti siano JavaBeans appropriati).


Un bean Java è essenzialmente una classe, ciò che classifica una classe come bean è: 1. Dovrebbe implementare un'interfaccia serializzabile (un'interfaccia Marker). 2. Il costruttore dovrebbe essere pubblico e non avere argomenti (ciò che altre persone chiamano un costruttore no-arg). 3. Dovrebbe avere getter e setter.

È interessante notare che il campo serialVersionUID è importante per il mantenimento dello stato dell'oggetto. Sotto il codice si qualifica come bean:

public class DataDog implements java.io.Serializable {

private static final long serialVersionUID = -3774654564564563L;

private int id;
private String nameOfDog;

//The constructor should NOT have arguments
public DataDog () {}


/** 4. getter/setter */

// getter(s)
public int getId() {
    return id;
}
public String getNameOfDog() {
    return nameOfDog;
}
// setter(s)
public void setId(int id) {
    this.id = id;
}
public void setNameOfDog(String nameOfDog) {
    this.nameOfDog = nameOfDog;
}}






serializable