Modulare Enterprise-OSGi-Anwendungen mit Eclipse Gemini

Beans erzeugen

Beans können über deren Konstruktor (mit und ohne Argumente) oder über eine (statische) Factory-Klasse erzeugt werden. Die verschiedenen Varianten, Beans zu erzeugen, sind in Listing 3 dargestellt. Unter jeder Variante steht der Java-Code, der dieser Bean-Definition in XML entspricht.

Listing 3
// Constructor creation

new model.account.jpa.CustomerImpl()

// Constructor creation with arguments

new model.account.jpa.CustomerImpl("Zaphod")

// Static Factory

      factory-method="createCustomer">
  
model.account.CustomerFactory.createCustomer("Zaphod")

// Instance Factory

new model.account.CustomerFactory().createCustomer("Zaphod")

Im bean-Element kann über das Attribut scope der Scope der Bean angegeben werden. Blueprint kennt die zwei Scopes Singleton und Prototype. Der Scope Singleton stellt sicher, dass nur genau eine Instanz der Bean erzeugt wird. Beim Scope Prototype wird bei jedem Zugriff auf die Bean eine neue Instanz erzeugt. Der Scope Singleton ist Standard und muss nicht angegeben werden. Der Prototype Scope wird in der Form <bean class=“CustomerImpl“ scope=“prototype“/> angegeben.

Innerhalb des bean-Elements werden die Properties der Bean angegeben. Als Wert einer Property kann eine Referenz auf eine andere Bean oder einen Service angegeben werden. Listing 4 zeigt das am Beispiel des Service customerRepository. Alternativ kann der Wert der Property direkt gesetzt werden. Listing 4 zeigt die wichtigsten Varianten.

Listing 4

  // Reference to other bean
  
  
  // String as value
  
  
  // List as value
  Acc-43Acc-87
  
  // Map as value
  

Die Konfiguration von Beans bietet eine Vielzahl von Möglichkeiten und lässt kaum Wünsche offen. Sie wurde nahezu eins zu eins von Spring übernommen. Eine Übersicht der Konfigurationsmöglichkeiten befindet sich in der Referenzdokumentation von Spring unter [2].

Services veröffentlichen

Veröffentlichte Services werden im XML-Element Service angegeben. Für jeden Service, der veröffentlicht wird, ist das Interface anzugeben sowie die Referenz auf die Bean mit der konkreten Implementierung. An Stelle des Interface kann auch die Variante auto-export=“interfaces“ verwendet werden. Das sorgt dafür, dass alle Interfaces automatisch als Service veröffentlicht werden, die die referenzierte Bean implementiert. Das ist in der Regel das gewünschte Verhalten. Properties des zu veröffentlichenden Service werden ebenfalls hier angegeben. Folgendes Listing veröffentlicht den Service tableView mit der Service-Property view.id, die den Wert customerTable hat:

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.