Orte, an denen JavaBeans verwendet werden?

172

Was ist eine JavaBean und warum brauche ich sie? Da kann ich alle Apps mit der Klassen- und Schnittstellenstruktur erstellen? Warum brauche ich Bohnen? Und können Sie mir einige Beispiele geben, bei denen Bohnen anstelle von Klassen und Schnittstellen wichtig sind?

Bitte erläutern Sie die Wesentlichkeit einer Bohne im folgenden Kontext:

  • Wep Apps
  • Standalone-Apps
Sidharth
quelle
10
Ich hoffe, Sie verwechseln nicht "Java Beans" und "Enterprise Java Beans oder EJBs".
Rahul
53
Eigentlich weiß ich nichts über Bean selbst. Wie kann ich mich dann mit EJB verwechseln? Gibt es etwas Besonderes?
Sidharth

Antworten:

178

Sie repräsentieren oft nur Daten aus der realen Welt. Hier ist ein einfaches Beispiel für einen Javabeaner:

public class User implements java.io.Serializable {

    // Properties.
    private Long id;
    private String name;
    private Date birthdate;

    // Getters.
    public Long getId() { return id; }
    public String getName() { return name; }
    public Date getBirthdate() { return birthdate; }

    // Setters.
    public void setId(Long id) { this.id = id; }
    public void setName(String name) { this.name = name; }
    public void setBirthdate(Date birthdate) { this.birthdate = birthdate; }

    // Important java.lang.Object overrides.
    public boolean equals(Object other) {
        return (other instanceof User) && (id != null) ? id.equals(((User) other).id) : (other == this);
    }
    public int hashCode() {
        return (id != null) ? (getClass().hashCode() + id.hashCode()) : super.hashCode();
    }
    public String toString() {
        return String.format("User[id=%d,name=%s,birthdate=%d]", id, name, birthdate);
    }
}

Die Implementierung Serializableist an sich nicht obligatorisch, aber sehr nützlich, wenn Sie Javabeans außerhalb des Java-Speichers beibehalten oder übertragen möchten, z. B. auf Festplatte oder über das Netzwerk.

In beispielsweise eine DAO - Klasse können Sie es verwenden , um eine Liste der Benutzer zu erstellen , wobei Sie speichern die Daten der userTabelle in der Datenbank:

List<User> users = new ArrayList<User>();
while (resultSet.next()) {
    User user = new User();
    user.setId(resultSet.getLong("id"));
    user.setName(resultSet.getString("name"));
    user.setBirthdate(resultSet.getDate("birthdate"));
    users.add(user);
}
return users;

In beispielsweise Sie eine Servlet - Klasse kann es verwenden , um Übertragung von Daten aus der Datenbank in die Benutzeroberfläche:

protected void doGet(HttpServletRequest request, HttpServletResponse response) {
    List<User> users = userDAO.list();
    request.setAttribute("users", users);
    request.getRequestDispatcher("users.jsp").forward(request, response);
}

In einer JSP-Seite können Sie beispielsweise über EL darauf zugreifen , was den Javabean-Konventionen entspricht, um die Daten anzuzeigen:

<table>
    <tr>
        <th>ID</th>
        <th>Name</th>
        <th>Birthdate</th>
    </tr>
    <c:forEach items="${users}" var="user">
        <tr>
            <td>${user.id}</td>
            <td><c:out value="${user.name}" /></td>
            <td><fmt:formatDate value="${user.birthdate}" pattern="yyyy-MM-dd" /></td>
        </tr>
    </c:forEach>
</table>

Macht das Sinn? Sie sehen, es ist eine Art Konvention, die Sie überall verwenden können, um Daten zu speichern , zu übertragen und darauf zuzugreifen .

Siehe auch:

BalusC
quelle
11
Eine nette Erklärung und in der Regel ein Dank für diese Implementierung von Serializable ist per se nicht obligatorisch, aber sehr nützlich, wenn Sie in der Lage sein möchten, Javabeans außerhalb des Java-Speichers zu speichern oder zu übertragen, z. B. auf Festplatte oder über das Netzwerk.
agpt
In Java Doc wird jedoch erwähnt, dass wir die Serialisierung implementieren sollten. Können Sie dies bitte klarstellen?
SSP
8
@SSP: 1) Es gibt kein Javadoc. 2) "sollte"! = "Muss".
BalusC
61

Bohnen selbst

JavaBeans gibt es überall, sie sind eine Konvention und fast jede etwas größere Bibliothek verwendet diese Konventionen, um Dinge zu automatisieren. Nur einige Gründe, warum JavaBeans verwendet werden sollten:

  • Sie serialisieren gut.
  • Kann durch Reflexion instanziiert werden.
  • Kann ansonsten sehr leicht durch Reflexion gesteuert werden.
  • Gut zum Einkapseln von tatsächlichen Daten aus Geschäftscode.
  • Gemeinsame Konventionen bedeuten, dass jeder Ihre Bohnen verwenden kann UND SIE JEDE ANDERE BOHNEN ohne jegliche Dokumentation / Anleitung einfach und konsistent verwenden können.
  • Sehr nahe an POJOs, was tatsächlich noch mehr Interoperabilität zwischen verschiedenen Teilen des Systems bedeutet.

Natürlich gibt es auch Enterprise JavaBeans, die eine ganz andere Sache sind und nicht mit einfachen JavaBeans gemischt werden sollten. Ich wollte nur EJB: s erwähnen, weil die Namen ähnlich sind und es leicht ist, diese beiden zu verwechseln.

Bohnen in Webanwendungen

Wenn Sie "normale" JavaBeans im Web-App-Kontext betrachten, sind sie sinnvoller als das Tragen von Schuhen in Ihren Beinen. Da die Servlet-Spezifikation erfordert, dass Sitzungen serialisierbar sind, sollten Sie Ihre Daten in der Sitzung als etwas speichern, das serialisierbar ist - warum machen Sie es dann nicht zu einer Bean? Werfen Sie einfach Ihre SomeBusinessDataBean in die Sitzung und Sie können loslegen, lächerlich einfach, spezifikationskonform und bequem.

Das Übertragen dieser Daten in die Anwendung ist ebenfalls einfach, da Sie mit JavaBeans Teile Ihrer Anwendung vollständig entkoppeln können. Stellen Sie sich JavaBeans als einen Brief und verschiedene Subsysteme der Anwendung als Abteilungen innerhalb eines sehr großen Unternehmens vor: Dept.A sendet eine Reihe von Daten an Dept.B, Dept.B weiß nicht - oder kümmert sich nicht einmal darum - woher die Daten stammen wie es sein sollte und kann einfach den Brief öffnen, Sachen daraus lesen und seine Sache basierend auf diesen Daten machen.

Bohnen in eigenständigen Anwendungen

Tatsächlich gilt das oben Gesagte auch für eigenständige Apps. Der einzige Unterschied besteht darin, dass Sie die Benutzeroberfläche etwas mehr durcheinander bringen können, da eigenständige Anwendungen über eine zustandsbehaftete Benutzeroberfläche verfügen, während Webanwendungen über eine statische Benutzeroberfläche verfügen, die in einigen Fällen nur zustandsbehaftete Benutzeroberflächen simuliert . Aufgrund dieses Unterschieds ist es einfacher, sich mit eigenständigen Anwendungen herumzuschlagen, aber das ist ein ganz anderes Thema wert und steht überhaupt nicht in direktem Zusammenhang mit JavaBeans.

Esko
quelle
50

Eine Bohne ist eigentlich nicht viel. Damit eine Klasse eine "Bohne" ist, ist nur Folgendes erforderlich:

  • einen öffentlichen Konstruktor ohne Argumente zu haben
  • serialisierbar sein (um die serialisierbare Schnittstelle entweder direkt oder über eine ihrer Superklassen zu implementieren).

Dazu können Sie Getter und Setter für Eigenschaften der Klasse hinzufügen, die einer bestimmten Namenskonvention entsprechen, wenn die Felder unter bestimmten Umständen erkennbar sein sollen (z. B. indem Sie diese Klasse zu einem Objekt machen, das Sie aus einem visuellen Editor in Ihrem ziehen und ablegen können IDE zum Beispiel).

Weitere Informationen direkt von Sun finden Sie hier .

JRL
quelle
15

Eine Java Bean ist eine Softwarekomponente, die so konzipiert wurde, dass sie in verschiedenen Umgebungen wiederverwendbar ist. Es gibt keine Einschränkung für die Fähigkeit einer Bohne. Es kann eine einfache Funktion ausführen, z. B. die Rechtschreibung eines Dokuments überprüfen, oder eine komplexe Funktion, z. B. die Prognose der Wertentwicklung eines Aktienportfolios. Eine Bean kann für einen Endbenutzer sichtbar sein. Ein Beispiel hierfür ist eine Schaltfläche auf einer grafischen Benutzeroberfläche. Eine Bean kann für einen Benutzer auch unsichtbar sein. Ein Beispiel für diese Art von Baustein ist die Software zum Dekodieren eines Multimedia-Informationsstroms in Echtzeit. Schließlich kann eine Bean so konzipiert sein, dass sie autonom auf der Workstation eines Benutzers oder in Zusammenarbeit mit einer Reihe anderer verteilter Komponenten arbeitet. Die Software zum Generieren eines Kreisdiagramms aus einer Reihe von Datenpunkten ist ein Beispiel für eine Bean, die lokal ausgeführt werden kann. Jedoch,

Wir werden in Kürze sehen, welche spezifischen Änderungen ein Softwareentwickler an einer Klasse vornehmen muss, damit sie als Java Bean verwendet werden kann. Eines der Ziele der Java-Designer war es jedoch, die Verwendung dieser Technologie zu vereinfachen. Daher sind die Codeänderungen minimal.

Vorteile von Java Beans

Eine Softwarekomponentenarchitektur bietet Standardmechanismen für den Umgang mit Softwarebausteinen. In der folgenden Liste sind einige der spezifischen Vorteile aufgeführt, die die Java-Technologie für einen Komponentenentwickler bietet:

  • A Bean bietet alle Vorteile von Javas Paradigma "Einmal schreiben, überall ausführen".
  • Die Eigenschaften, Ereignisse und Methoden einer Bean, die einem Application Builder-Tool zur Verfügung gestellt werden, können gesteuert werden.
  • Eine Bean kann so konzipiert sein, dass sie an verschiedenen Orten ordnungsgemäß funktioniert, was sie auf globalen Märkten nützlich macht.
  • Hilfssoftware kann bereitgestellt werden, um eine Person bei der Konfiguration einer Bean zu unterstützen. Diese Software wird nur benötigt, wenn die Entwurfszeitparameter für diese Komponente festgelegt werden. Es muss nicht in die Laufzeitumgebung aufgenommen werden.
  • Die Konfigurationseinstellungen einer Bean können in einem dauerhaften Speicher gespeichert und zu einem späteren Zeitpunkt wiederhergestellt werden.
  • Eine Bean kann sich registrieren, um Ereignisse von anderen Objekten zu empfangen, und Ereignisse generieren, die an andere Objekte gesendet werden.

Hier ist ein einfaches Beispiel für einen Javabeaner:

public class MyBean implements java.io.Serializable
{

       protected  int theValue;

       public MyBean()
       {
       }

       public void setMyValue(int newValue)
       {
           theValue = newValue;
       }

      public int getMyValue()
      {
           return theValue;
      }

}

Dies ist eine echte Bean namens MyBean mit dem Status (der Variablen theValue), der vom JavaBeans-Persistenzmechanismus automatisch gespeichert und wiederhergestellt wird. Sie verfügt über eine Eigenschaft namens MyValue, die von einer visuellen Programmierumgebung verwendet werden kann. Diese Bean hat keine visuelle Darstellung, dies ist jedoch keine Voraussetzung für eine JavaBean-Komponente.

Vibha Sanskrityayan
quelle