Qual è la differenza tra un JavaBean e un POJO?


210

Non sono sicuro della differenza. Sto usando Hibernate e, in alcuni libri, usano JavaBean e POJO come termine intercambiabile. Voglio sapere se c'è una differenza, non solo nel contesto di Hibernate, ma come concetti generali.

Risposte:


252

Un JavaBean segue alcune convenzioni. Denominazione getter / setter, con un costruttore predefinito pubblico, essendo serializzabile ecc. Vedere le Convenzioni JavaBeans per maggiori dettagli.

Un POJO (plain-old-Java-object) non è rigorosamente definito. È un oggetto Java che non ha un requisito per implementare una particolare interfaccia o derivare da una particolare classe base, o utilizzare particolari annotazioni per essere compatibile con un determinato framework e può essere qualsiasi arbitrario (spesso relativamente semplice) Oggetto Java.


41
Nota che un JavaBean può essere e di solito è un POJO e molti POJO sono in realtà JavaBean.
Joachim Sauer,

8
No, secondo la definizione di POJO un Java Bean non è un POJO perché per essere considerato un Java Bean una classe deve seguire alcune convenzioni di codifica (ad es. Avere un costruttore no-arg, avere metodi che iniziano con le parole "get" e / o "set") o essere distribuito con una classe BeanInfo.
Nat

15
Poiché si tratta di convenzioni , penso che si possa sostenere con successo che un bean può essere un POJO (ad esempio, non si eredita da un'interfaccia JavaBean o simile)
Brian Agnew,

1
Le specifiche JavaBeans non riescono a definire un JavaBean diverso da un "componente software riutilizzabile" (o in parte simile) in modo molto approssimativo. Non deve avere un costruttore no-arg, non ha bisogno di metodi che iniziano con "get" o "set", non ha bisogno di essere serializzabile, non ha nemmeno bisogno di essere una classe.
Tom Hawtin - tackline

4
In termini matematici, possiamo dire che i Javabean formano un sottoinsieme di POJO, perché, vincoli specifici posti su un POJO lo rendono un Javabean.
Nishit,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.