Czym dokładnie jest JavaBean?

Zrozumiałem, myślę, że "Bean" jest klasą Javy z właściwościami i getterami / seterami. O ile dobrze rozumiem, jest to odpowiednik struktury C. To prawda?

Czy istnieje prawdziwa składniowa różnica między klasą fasolową a zwykłą? Czy istnieje jakaś specjalna definicja lub interfejs?

W zasadzie, dlaczego jest na to określenie?

Edit : Jeśli możesz być tak miły i dodać informacje dotyczące interfejsu Serializable i co to znaczy, aby Twoja odpowiedź, będę bardzo wdzięczny.

Author: nbro, 2010-07-21

15 answers

JavaBean jest tylko standardem

  1. All properties private (use getters/setters)
  2. a public No-argument constructor
  3. Serializable.
To wszystko. To tylko zjazd. Zależy od tego jednak wiele bibliotek.

W odniesieniu do Serializable, z dokumentacji API :

Serializowalność klasy jest włączona przez klasę implementującą java. io. Serializable interfejs. Klasy, które nie implementują tego interfejs nie będzie miał żadnego z ich stanu serializowanego lub deserializowanego. Wszystkie podtypy klasy serializowalnej są same w sobie serializowalne. Na interfejs serializacji nie posiada metod ani pól i służy tylko do określ semantykę bycia serializowalnym.

Innymi słowy, obiekty serializowalne mogą być zapisywane w strumieniach, a więc w plikach, obiektowych bazach danych, cokolwiek naprawdę.

Nie ma też żadnej różnicy składniowej pomiędzy JavaBean a inną klasą -- Klasa definiuje JavaBean, jeśli jest zgodna ze standardami.

Istnieje na to określenie, ponieważ standard pozwala bibliotekom programowo robić rzeczy z instancjami klas zdefiniowanymi w predefiniowany sposób. Na przykład, jeśli Biblioteka chce przesyłać strumieniowo dowolny obiekt, który do niej przekazujesz, wie, że może, ponieważ twój obiekt jest serializowalny(zakładając, że lib wymaga, aby twoje obiekty były poprawne w JavaBeans).

 1547
Author: hvgotcodes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-16 22:17:45

Jest na to określenie, żeby brzmiało wyjątkowo. Rzeczywistość nie jest tak tajemnicza.

W zasadzie "fasola":

  • jest obiektem serializowalnym (czyli implementuje java.io.Serializable, i robi to poprawnie), że
  • ma "właściwości", których gettery i settery są tylko metodami o określonych nazwach (np. getFoo() jest getterem dla właściwości" Foo") i
  • posiada publiczny konstruktor 0-arg (więc może być tworzony do woli i konfigurowany przez ustawienie jego właściwości).

Aktualizacja:

Jeśli chodzi o Serializable: jest to nic innego jak "interfejs znacznika" (interfejs, który nie deklaruje żadnych funkcji), który mówi Javie, że Klasa implementująca wyraża zgodę (i sugeruje, że jest zdolna) na "serializację" - proces, który przekształca instancję w strumień bajtów. Te bajty mogą być przechowywane w plikach, wysyłane przez połączenie sieciowe itp. i mają wystarczającą ilość informacji, aby JVM (przynajmniej taki, który wie o typie obiektu) mógł zrekonstruuj obiekt później-być może w innej instancji aplikacji, a nawet na zupełnie innej maszynie!

Oczywiście, aby to zrobić, klasa musi przestrzegać pewnych ograniczeń. Głównym z nich jest to, że wszystkie pola instancji muszą być albo prymitywnymi typami (int, bool, itp.), instancjami jakiejś klasy, która jest również serializowalna, albo oznaczone jako transient, aby Java nie próbowała ich włączyć. (To oczywiście oznacza, że transient pola nie przetrwają podróży nad strumieniem. A klasa, która posiada pola transient powinna być przygotowana do ich ponownej inicjalizacji w razie potrzeby.)

Klasa, która nie może przestrzegać tych ograniczeń, nie powinna implementować Serializable (i, IIRC, kompilator Javy nawet nie pozwoli to zrobić.)

 246
Author: cHao,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-05 12:58:32

JavaBeans to Klasy Javy, które stosują się do niezwykle prostej konwencji kodowania. Wszystko co musisz zrobić to

  1. zaimplementuj interfejs java. io. Serializable - aby zapisać stan obiekt
  2. Użyj publicznego konstruktora pustego argumentu-aby utworzyć instancję obiektu
  3. and provide public getter and setter methods - to get and set the values of private variables (properties ).
 82
Author: Kamal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-21 04:22:57

Właściwości JavaBeans

JavaBean to obiekt Java spełniający pewne konwencje programowania:

  1. Klasa JavaBean musi zaimplementować Serializable lub Externalizable

  2. Klasa JavaBean musi mieć konstruktor no-arg

  3. Wszystkie właściwości JavaBean muszą mieć publiczne metody setter i getter

  4. Wszystkie zmienne instancji JavaBean powinny być prywatne

Przykład 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;
   }
}
 51
Author: Md Azaharuddin Ali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-20 07:10:16

Java Beans używa mniej kodu i więcej podejścia do pracy... Java Beans jest używany w Java EE jako uniwersalny kontrakt na wykrywanie i dostęp do środowiska uruchomieniowego. Na przykład JavaServer Pages (JSP) używa Java Beans jako obiektów przesyłania danych między stronami lub między serwletami a JSP. JavaBeans Activation Framework wykorzystuje Java Beans do integracji obsługi typów danych MIME z Java EE. Java EE Management API wykorzystuje JavaBeans jako podstawę do oprzyrządowania zasobów do zarządzania w środowisku Java EE.

O Serializacji:

W serializacji obiektów obiekt może być reprezentowany jako sekwencja bajtów, która zawiera dane obiektu, a także informacje o typie obiektu i typach danych przechowywanych w obiekcie.

Po zapisaniu serializowanego obiektu do pliku można go odczytać z pliku i deserializować, czyli informacje o typie i bajty, które reprezentują obiekt i jego dane mogą być użyte do odtworzenia obiekt w pamięci.

 18
Author: HANU,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-24 09:25:54

Serializacja będzie przydatna podczas wdrażania projektu na wielu serwerach, ponieważ beans będzie utrzymywany i przenoszony między nimi.

 17
Author: Truong Ha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-21 06:03:26

Wyjaśnienie z przykładem.

1. import java. io. Serializable

Jeśli chodzi o serializację, zobacz dokumentację .

2. pola prywatne

Fields should be private for prevent Outer classes to easy modify those fields. Zamiast bezpośredniego dostępu do tych pól, używane są zwykle metody getter/setter.

3. Konstruktor

Konstruktor publiczny bez żadnego argumentu.

4. getter / setter

Metody Getter i setter do dostępu do prywatnych pól.

/** 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
Author: phi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-08 17:14:15

Jak na Wikipedii:

  1. Klasa musi mieć publiczny konstruktor domyślny (bez argumentów). Umożliwia to łatwe tworzenie instancji w ramach edycji i aktywacji.

  2. Właściwości klasy muszą być dostępne za pomocą get, set, is (mogą być używane dla właściwości boolean zamiast get) i innych metod (tak zwanych metod accessor i metod mutator) zgodnie ze standardową konwencją nazewnictwa. Pozwala to na łatwą automatyczną kontrolę i aktualizację fasoli stan w ramach frameworków, z których wiele zawiera niestandardowe edytory dla różnych typów właściwości. Seter może mieć jeden lub więcej niż jeden argument.

  3. Klasa powinna być serializowalna. [Umożliwia to aplikacjom i frameworkom niezawodne zapisywanie, przechowywanie i przywracanie stanu bean w sposób niezależny od maszyny wirtualnej i platformy.]

Więcej informacji pod tym linkiem .

 9
Author: Diganta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-16 11:41:46

Java Beans jest standardem, a jego podstawowe wymagania składniowe zostały jasno wyjaśnione przez pozostałe odpowiedzi.

Jednak IMO jest to coś więcej niż zwykły standard składni. Realnym znaczeniem lub zamierzonym zastosowaniem Java Beans jest, wraz z różnymi narzędziami wspierającymi standard, ułatwienie ponownego użycia kodu i inżynierii oprogramowania opartego na komponentach, tj. umożliwienie programistom tworzenia aplikacji przez złożenie istniejących komponentów (klas) i bez konieczności pisania żadnego kodu (lub tylko jednego kodu). trzeba napisać trochę kodu kleju). Niestety ta technologia jest zbyt niedoceniana i niedostatecznie wykorzystywana przez przemysł, co można powiedzieć z odpowiedzi w tym wątku.

Jeśli czytasz samouczek Oracle na temat Java Beans , możesz lepiej to zrozumieć.

 8
Author: Victor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-21 15:11:54

Jeśli chodzi o drugą część twojego pytania, serializacja jest mechanizmem trwałości używanym do przechowywania obiektów jako sekwencji podpisanych bajtów. Mówiąc mniej formalnie, przechowuje stan obiektu, więc można go odzyskać później, przez de-serializację.

 7
Author: Mike,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-23 19:26:55

Java Bean jest klasą Javy [pojęciową], która powinna być zgodna z następującymi konwencjami:

  1. powinien mieć konstruktor no-arg.
  2. powinno być Serializowalne.
  3. powinien dostarczać metody do ustawiania i uzyskiwania wartości właściwości, znanych jako metody getter i setter.

Jest to komponent oprogramowania wielokrotnego użytku. Może hermetyzować wiele obiektów w jeden obiekt, dzięki czemu ten sam obiekt może być dostępny z wielu miejsc i jest krokiem w kierunku łatwej konserwacji kod.

 7
Author: Raghav salotra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-06 08:29:04

Są serializowalne, mają konstruktor zerowy argument i umożliwiają dostęp do właściwości za pomocą metod getter i setter. Nazwa "Bean" została nadana dla tego standardu, który ma na celu tworzenie komponentów oprogramowania wielokrotnego użytku dla Javy.according to wiki

Obiekty, które tworzą szkielet Twojej aplikacji i które są zarządzane przez kontener Spring IoC, nazywane są beans. Fasola to obiekt, który jest instancjonowany, montowany i w inny sposób zarządzany przez kontener Spring IoC. W przeciwnym razie fasola jest po prostu jednym z wielu obiektów w aplikacji. according to wiosna io .

 6
Author: Balman Rawat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-06 00:26:49

Java Beans to zwykłe klasy Javy, które podążają za pewnymi konwencjami - do ich tworzenia nie potrzebujesz specjalnych narzędzi.

Istnieją dwie podstawowe konwencje, których należy przestrzegać przy tworzeniu klas Java Bean:

    Java Bean jest implementowana poprzez zdefiniowanie dwóch publicznych funkcji (funkcji get I set)
  • " operacje " klasy Java Bean są innymi funkcjami publicznymi zdefiniowanymi w klasy.
 6
Author: Pankaj Mandale,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-16 09:10:56

Aby zrozumieć JavaBean musisz zauważyć następujące: JavaBean jest pojęciowym materiałem i nie może reprezentować klasy konkretnych rzeczy

JavaBean to narzędzie programistyczne, które może być wizualizowane w działaniu komponentów oprogramowania wielokrotnego użytku

JavaBean jest oparty na specyfikacji Sun JavaBeans i może być komponentami wielokrotnego użytku. Jego największą cechą jest ponowna użyteczność.

 2
Author: Marcus Thornton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-19 03:43:35

Java Bean jest w zasadzie klasą, co klasyfikuje klasę jako fasolę jest: 1. Powinien zaimplementować interfejs serializowalny(interfejs znacznika). 2. Konstruktor powinien być publiczny i nie mieć argumentów (co inni nazywają konstruktorem no-arg). 3. Powinien mieć getter i setter.

Warto zauważyć, że pole serialVersionUID jest ważne dla zachowania stanu obiektu. Poniższy kod kwalifikuje się jako 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;
}}
 0
Author: Amos Kosgei,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-05 10:54:45