Am înțeles, cred, că un "Bean" este o clasa Java cu proprietăți și getters/setteri. La fel de mult cum am înțeles, este echivalentul a un C struct. Este adevărat?
De asemenea, există un real sintactice diferența între un bob de fasole și o clasă obișnuită? Nu există nici o definiție specială sau o interfață?
Practic, de ce nu există un termen pentru asta?
De asemenea, ceea ce face Serializable
interfață spun?
Un JavaBean este doar o standard
Serializable
.Ca's a. L's doar o convenție. O mulțime de biblioteci depinde de ea, deși.
Cu privire la Serializable
, de documentație API:
Serializability de o clasă este activată de către clasa de punere în aplicare a java.io.Interfața Serializable. Clasele care nu pune în aplicare acest lucru interfață nu va avea nici de starea lor serializat sau deserialized. Toate subtipurile de un serializable clasa ei înșiși sunt serializabile. La serialization interfata nu are metode sau câmpuri și servește doar pentru a identifica semantica fiind serializable.
Cu alte cuvinte, serializable obiecte pot fi scrise fluxuri, și, prin urmare, fișiere, baze de date obiect, nimic adevărat.
De asemenea, nu există nici o diferență sintactică între un JavaBean și o altă clasă ... o clasa JavaBean dacă urmează standardele.
Nu există un termen pentru asta, deoarece standardul permite bibliotecilor să programatic de a face lucruri cu cazuri de clasă ai defini într-un mod predefinit. De exemplu, dacă o bibliotecă vrea să flux orice obiect pe care îl trece în el, știe că se poate pentru că obiectul este serializable (presupunând că lib necesită obiectele să fie corespunzătoare JavaBeans).
Nu's un termen pentru ca acesta să facă un sunet special. Realitatea este nici pe departe atât de misterios.
Practic, un "Bean":
java.io.Serializable
, și face acest lucru în mod corect), caregetFoo()
este getter pentru "Foo" proprietate), și Update:
Cum pentru Serializable`: Că nu este nimic, dar un "marker interfata" (o interfață care nu't declare orice funcții) care spune Java care implementează clasa consimte să (și implică faptul că este capabil de a) "serialization" -- un proces care convertește o instanță într-un flux de octeți. Cei octeți pot fi stocate în fișiere, a trimis o conexiune de rețea, etc, și au suficiente informatii pentru a permite un JVM (cel puțin, unul care știe despre obiect's type) pentru a reconstrui obiect mai târziu, eventual într-un alt exemplu de aplicație, sau chiar pe o alta masina!
Desigur, în scopul de a face asta, clasa trebuie să respecte anumite limite. Șef printre ele este că toate exemplu, câmpurile trebuie să fie de tipuri primitive (int, bool, etc), instanțe de clasă, care este, de asemenea, serializable, sau marcate ca "intermediar", astfel încât Java câștigat't încerca să le includă. (Aceasta, desigur, înseamnă că "intermediar" de domenii nu va supraviețui călătoriei peste un pârâu. O clasă care are "intermediar" de domenii ar trebui să fie pregătite pentru a reinițializa-le dacă este necesar.)
O clasă care nu poate respecta aceste limitări nu trebuie să pună în aplicare Serializable
(și, IIRC, Java compiler câștigat't chiar să l facă.)
JavaBeans sunt clase Java care aderă la un extrem de simplu de codificare convenție. Tot ce trebuie să faceți este să
Proprietăți de JavaBeans
Un JavaBean este un obiect Java care îndeplinește anumite convenții de programare:
La clasa JavaBean trebuie să pună în aplicare, fie Serializable
sau
Externalizable
La clasa JavaBean trebuie să aibă un no-arg constructor
Toate JavaBean proprietăți trebuie să aibă publice setter și getter
Toate JavaBean variabile de instanta ar trebui să fie privat
Exemplu 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;
}
}
Explicație cu un exemplu.
1. import java.io.Serializable
Cum pentru Serializare, a se vedea documentația.
2. terenurile proprietate privată
Domenii ar trebui să fie privat pentru a preveni exterior clase de a modifica cu ușurință aceste domenii. În loc de direct accesarea acelor domenii, usuagly getter/setter metode sunt folosite.
3. Constructor
Un constructor publice fără nici un argument.
4. getter/setter
Metode Getter si setter pentru accesarea și modificarea terenurile proprietate privată.
/** 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 = id;
}
public void setName(String name) {
this.name = name;
}
}
Java Beans sunt utilizați pentru cod mai puțin și mai mult de lucru de abordare... Java Beans sunt folosite de-a lungul Java EE ca un universal contract de execuție de descoperire și de acces. De exemplu, Pagini JavaServer (JSP) utilizează Java Beans ca obiecte de transfer de date între pagini sau între servlet-uri si Jsp-uri. Java EE's JavaBeans Cadru de Activare foloseste Java Beans pentru integrarea sprijin pentru MIME tipuri de date în Java EE. Java EE Management API utilizează JavaBeans ca fundament pentru instrumente de resursele să fie gestionate într-un Java EE mediu.
Despre Serialization:
În serializarea obiectelor un obiect poate fi reprezentat ca o succesiune de octeți, care include obiectul's de date, precum și informații despre obiectul's de tip și tipurile de date stocate în obiect.
După un obiect serializat a fost scris într-un fișier, acesta poate fi citit din fișier și deserialized care este, de tipul de informații și de octeți care reprezintă obiectul și datele sale pot fi folosite pentru a recrea obiect în memorie.
Ca pe Wikipedia:
Clasa trebuie să aibă un public constructorul implicit (fără argumente). Aceasta permite ușor instanțierea în termen de editare și de activare a cadrelor.
Clasa de proprietăți trebuie să fie accesibile folosind get, set, este (poate fi folosit pentru boolean proprietăți în loc de a obține), și alte metode (așa-numitele metode accesor și mutator metode) în conformitate cu un standard convenție de denumire. Aceasta permite ușor automatizate de control și actualizarea lui bean de stat în cadre, multe dintre care includ personalizate redactori pentru diferite tipuri de proprietăți. Setteri poate avea unul sau mai mult de un argument.
Clasa ar trebui să fie serializabile. [Acest lucru permite aplicații și cadre credibil de a salva, stoca, și de a restabili bean's de stat într-un mod independent de VM și de platformă.]
Pentru mai multe informații urmați acest link.
Java Beans este un standard, iar sintaxa de bază cerințe au fost clar explicate de către alte răspunsuri.
Cu toate acestea, IMO, este mai mult decât un simplu sintaxa standard. Sensul real sau de utilizare preconizate de Java Beans este, împreună cu diverse instrument sprijină în jurul standard, pentru a facilita reutilizarea codului și component-based software engineering, adică permite dezvoltatorilor să construiască aplicații de asamblare a componentelor existente (clase) și fără a fi nevoie să scrie orice cod (sau doar pentru a scrie un pic de lipici cod). Din păcate, această tehnologie este sub-estimat și sub-utilizate de către industrie, care poate fi spus de răspunsuri în acest thread.
Dacă ai citit Oracolul's tutorial pe Java Beans, puteți obține o înțelegere mai bună în asta.
Un Java Bean este o clasă java [conceptuală] care ar trebui să urmeze următoarele convenții:
Este un reutilizabile componentă software. Se poate îngloba mai multe obiecte într-un singur obiect, astfel încât același obiect poate fi accesat de la mai multe locuri și este un pas în direcția întreținere ușoară de cod.
În ceea ce privește a doua parte a întrebării dumneavoastră, Serializarea este o persistență a mecanismului utilizat pentru a stoca obiecte ca o secvență de semnat bytes. Pune mai puțin formal, se stochează starea unui obiect astfel încât să puteți recupera mai târziu, prin de-serializarea.
Acestea sunt serializabile, zero argument constructor, și să permită accesul la proprietăți, folosind metode getter si setter. Numele "Bean" a fost dat să cuprindă acest standard, care își propune să creeze componente software reutilizabile pentru Java.potrivit
wiki
Obiectele care formează baza de cererea dumneavoastră și care sunt gestionate de Primăvară IoC container sunt numite fasole. Un bean este un obiect care este instanțiată, asamblate, și de altfel gestionate de un arc IoC container. În caz contrar, un bean este pur și simplu unul dintre mai multe obiecte în cererea dumneavoastră.
potrivit
primăvara io.
Un Java Bean este, în esență, o clasa, a clasifica o clasa ca un bob de fasole este:
Bun pentru a nota serialVersionUID domeniu este importantă pentru menținerea obiectului de stat. Codul de mai jos se califică ca un bob de fasole:
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;
}}
Doar un pic de fond/actualizare cu privire la conceptul de fasole. Multe alte răspunsuri au de fapt de ce dar nu atât de mult de ce de pe ei.
Ele au fost inventate de timpuriu în Java, ca parte a clădirii Gui. Au urmat modele, care au fost usor de instrumente pentru a trage în afară permițându-le să creeze un panoul de proprietăți deci, ai putea edita atributele de Fasole. În general, Fasole proprietăți reprezentat un control pe ecran (Cred x,y,lățime,înălțime,text,..)
Puteți, de asemenea, cred că de ea ca un puternic tastat structura de date.
De-a lungul timpului acestea au devenit utile pentru o mulțime de instrumente care utilizează același tip de acces (De exemplu, Hibernate să persiste structuri de date pentru baza de date)
Ca instrumente au evoluat, s-au mutat mai spre adnotări și departe de trăgând în afară setter/getter nume. Acum, cele mai multe sisteme de don't nevoie de fasole, ei pot lua orice plain old java object cu adnotat proprietăți care să le spună cum să le manipuleze.
Acum văd fasole ca adnotat de proprietate bile ... ei sunt într-adevăr utile doar pentru adnotări pe care le efectuează.
Fasole sine nu sunt un sănătos model. Ei distrug încapsulare, prin natura lor, deoarece ele expun toate proprietățile lor externe de manipulare și cum acestea sunt utilizate există o tendință (în nici un caz o cerință) pentru a crea cod pentru a manipula bean pe plan extern în loc de a crea cod în interiorul bean (încalcă "nu't cere un obiect pentru a-l's valori, cere un obiect pentru a face ceva pentru tine"). Folosind adnotat pojos cu minim getters și nu setteri este mult mai OO restabilirea încapsulare și cu posibilitatea de imuabilitate.
Apropo, ca toate astea se intampla pe cineva extins conceptul la ceva numit Enterprise Java Beans. Acestea sunt... diferite. și ei sunt destul de complicate pe care mulți oameni au simțit că nu - 't înțelege întregul Bean concept și oprit de a utiliza acest termen. Acesta este, cred, de ce tu, în general, auzi fasole menționată ca POJOs (deoarece fiecare obiect java este un POJO acest lucru este punct de vedere tehnic OK, dar când auzi pe cineva spunând POJO acestea sunt de cele mai multe ori mă gândesc la ceva care urmează model de fasole)
Pentru a înțelege JavaBean aveți nevoie pentru a observa urmatoarele: JavaBean este un conceptuale lucruri și nu poate reprezenta o clasă de lucruri specifice
JavaBean este un instrument de dezvoltare pot fi vizualizate în operațiunea de componente software reutilizabile
JavaBean se bazează pe Soare JavaBeans caietul de sarcini și pot fi componente reutilizabile. Cea mai mare caracteristică este de re-utilizare.
Un bean e o clasă Java cu numele de metode care urmează Java Bean orientări (numit, de asemenea, modele de design) pentru proprietăți, metode, evenimente . Astfel, orice metodă publică de clasa bean care nu este parte dintr-o proprietate definiție este o metoda bean. Minim, o clasa Java, chiar și cu nici o proprietate, ca unic membru (desigur, însoțire publice getter și setter necesar), o metodă publică ca unic membru sau doar un eveniment public ascultător metodă de înregistrare este un Java bean. În plus, proprietatea poate fi read-only (proprietate are un getter metoda dar nu setter) sau scrie-singura proprietate (are un setter metodă numai). Java bean trebuie să fie o clasă publică pentru a fi vizibil pentru orice beanbox instrument sau container. Recipientul trebuie să fie capabil de a instantia ea; astfel, acesta trebuie să aibă un constructor publice prea. De JavaBeans caietul de sarcini nu are nevoie de o fasole pentru a avea un public zero-args constructor, explicit sau implicit, pentru un recipient pentru a instantia ea. Dacă ai putea oferi un fișier (cu extensia .ser) conțin o serializat exemplu, un beanbox instrument putea folosi acest fișier pentru a instantia un prototip de fasole. În caz contrar, bean-ul trebuie să aibă un public zero-args constructor, fie explicite sau implicite.
După ce fasolea este instanțiată, Java Bean API ( java.fasole.*) poate introspecție și metodele de apel pe ea. Dacă nici o clasă implementează o interfață BeanInfo sau extinderea unei BeanInfo implementare , SimpleBeanInfo clasa, este disponibil, de introspecție implică utilizarea de reflecție (implicit introspecție) pentru a studia metodele acceptate de către o țintă de fasole și apoi se aplică simple modele de design(orientări) de a deduce din aceste metode ce proprietati, evenimente si metode publice sunt acceptate. Dacă o clasă implementează o interfață BeanInfo (pentru un bean Foo, acesta trebuie să fie numit FooBeanInfo) este disponibil, API ocolește implicit introspecție și utilizează metode publice (getPropertyDescriptor(), getMethodDescriptors(), getEventSetDescriptors() ) din această clasă pentru a obține informații. Dacă o clasă extinderea SimpleBeanInfo este disponibil, în funcție de care dintre SimpleBeanInfo metode publice (getPropertyDescriptor(), getMethodDescriptors(), getEventSetDescriptors() ) sunt înlocuite, se vor folosi acele înlocuită de metode(s) pentru a obține informații; pentru o metodă care nu este anulată, va default corespunzătoare implicit introspecție. Un bob de fasole trebuie să fie instanțiată oricum, chiar dacă nu implicit introspecție este realizată pe ea. Astfel, cerința de un public zeri-args constructor. Dar, desigur, Serializable sau interfata Externalizable nu este necesar ca acesta să fie recunoscut. Cu toate acestea Java Bean caietul de sarcini spune, 'Am dori, de asemenea, să fie "banal" pentru comune în caz de Fasole mic, care pur și simplu vrea să aibă starea sa internă salvat și nu vrea să se gândească la asta.' Deci, toate boabele trebuie să pună în aplicare Serializable sau interfata Externalizable.
În general, Austria caietul de sarcini nu este greu și rapid despre ceea ce constituie un bob de fasole. "Scris de componente JavaBeans este surprinzător de ușor. Nu't nevoie de un instrument special și nu't trebuie să pună în aplicare orice interfețe. Scris de fasole este pur și simplu o chestiune de a urma anumite convenții de codificare. Tot ce trebuie să faceți este de a face clasa ta arata ca un bob de fasole — unelte care folosesc fasole va fi capabil de a recunoaște și de a folosi fasole." Trivial, chiar următoarea clasă este un Java Bean,
public class Banal implementează java.io.Serializable {}
Spun, un bob constructorul a unor parametri. Să presupunem că unele sunt tipuri simple. Recipientul ar putea să nu știu ce valori să le atribui; chiar dacă aceasta nu rezultă un exemplu ar putea să nu fie reutilizabile. Se poate face sens doar dacă utilizatorul poate configura (specifica valori) de către spun adnotări sau fișiere de configurare xml ca în Primăvară fasole. Și să presupunem că unii parametri sunt de clasa sau interfata tipuri. Din nou, containerul ar putea să nu știe ce valori să-i atribuiți. Se poate face sens doar dacă utilizatorul poate configura (specifica anumite obiecte) de către spun adnotări sau fișiere de configurare xml. Cu toate acestea, chiar și în Primăvară (prin fișiere de configurare xml), atribuirea de obiecte specifice (cu string nume) pentru constructor argumente (