© DrHitch/Shutterstock.com
Shortcuts
CDI

12 Stereotypes


In der Praxis werden CDI Beans häufig mit immer wiederkehrenden Kombinationen von Scopes und Interceptor Bindings versehen, die den Elementen der verwendeten Architekturmuster entsprechen. So könnten etwa die Objekte, die aus einer auf Basis von JSF entwickelten Benutzeroberfläche angesprochen werden, immer mit @Named und @RequestScoped annotiert sein.

CDI bietet zur Modellierung solcher wiederkehrender Bean-Eigenschaften Stereotypes an. Das sind Annotationen, die selbst mit @Stereotype (javax.enterprise.inject.Stereotype) und den gewünschten weiteren Annotationen versehen sind. Listing 12.1 zeigt den bereits vordefinierten Stereotype @Model (javax.enterprise.inject.Model), der für Beans gedacht ist, die als Model in einer MVC-basierten Anwendung genutzt werden sollen.

@Named
@RequestScoped
@Stereotype
@Target( { TYPE, METHOD, FIELD })
@Retention(RUNTIME)
public @interface Model
{
}

Listing 12.1: Stereotype

Die erlaubten Elemente eines Stereotyps sind:

  • Eine Scope-Annotation
  • @Named
  • @Alternative
  • Interceptor Bindings
  • Andere Stereotypes

Eine CDI Bean kann dann anstelle der einzelnen Annotationen mit einem oder mehreren Stereotypes markiert werden. Ein im Stereotype enthaltener Scope wirkt dabei als Vorgabewert, der mit einer zusätzlich angegebenen Scope-Annotation überschrieben werden kann (Listing 12.2).

@Model
@SessionScoped

public class SomeModel
{

Listing 12.2: Nutzung eines Stereotyps, aber mit anderem Scope

Das Gleiche gilt für die Annotation @Named: Ist sie im Stereotyp enthalten, wird ein Standardname vergeben, wenn die Bean nicht zusätzlich mit @Named("…") annotiert ist.

Enthält ein Stereotype die Annotation @Alternative, so sind damit annotierte Beans nach den oben beschriebenen Regeln inaktiv, wenn sie nicht in beans.xml explizit aktiviert werden (Listing 12.3). Hier gibt es eine Ergänzung: Durch Angabe des Stereotyps im Deskriptor können alle damit markierten Alternativ-Beans gemeinsam aktiviert werden (Listing 12.4).

@Alternative
@Stereotype

@Retention(RUNTIME)
@Ta...
Shortcuts
CDI

12 Stereotypes

In der Praxis werden CDI Beans häufig mit immer wiederkehrenden Kombinationen von Scopes und Interceptor Bindings versehen, die den Elementen der verwendeten Architekturmuster entsprechen. So könnten etwa die Objekte, die aus einer auf Basis von JSF entwickelten Benutzeroberfläche angesprochen werden, immer mit @Named und @RequestScoped annotiert sein.

Shortcut Autorenteam


In der Praxis werden CDI Beans häufig mit immer wiederkehrenden Kombinationen von Scopes und Interceptor Bindings versehen, die den Elementen der verwendeten Architekturmuster entsprechen. So könnten etwa die Objekte, die aus einer auf Basis von JSF entwickelten Benutzeroberfläche angesprochen werden, immer mit @Named und @RequestScoped annotiert sein.

CDI bietet zur Modellierung solcher wiederkehrender Bean-Eigenschaften Stereotypes an. Das sind Annotationen, die selbst mit @Stereotype (javax.enterprise.inject.Stereotype) und den gewünschten weiteren Annotationen versehen sind. Listing 12.1 zeigt den bereits vordefinierten Stereotype @Model (javax.enterprise.inject.Model), der für Beans gedacht ist, die als Model in einer MVC-basierten Anwendung genutzt werden sollen.

@Named
@RequestScoped
@Stereotype
@Target( { TYPE, METHOD, FIELD })
@Retention(RUNTIME)
public @interface Model
{
}

Listing 12.1: Stereotype

Die erlaubten Elemente eines Stereotyps sind:

  • Eine Scope-Annotation
  • @Named
  • @Alternative
  • Interceptor Bindings
  • Andere Stereotypes

Eine CDI Bean kann dann anstelle der einzelnen Annotationen mit einem oder mehreren Stereotypes markiert werden. Ein im Stereotype enthaltener Scope wirkt dabei als Vorgabewert, der mit einer zusätzlich angegebenen Scope-Annotation überschrieben werden kann (Listing 12.2).

@Model
@SessionScoped

public class SomeModel
{

Listing 12.2: Nutzung eines Stereotyps, aber mit anderem Scope

Das Gleiche gilt für die Annotation @Named: Ist sie im Stereotyp enthalten, wird ein Standardname vergeben, wenn die Bean nicht zusätzlich mit @Named("…") annotiert ist.

Enthält ein Stereotype die Annotation @Alternative, so sind damit annotierte Beans nach den oben beschriebenen Regeln inaktiv, wenn sie nicht in beans.xml explizit aktiviert werden (Listing 12.3). Hier gibt es eine Ergänzung: Durch Angabe des Stereotyps im Deskriptor können alle damit markierten Alternativ-Beans gemeinsam aktiviert werden (Listing 12.4).

@Alternative
@Stereotype

@Retention(RUNTIME)
@Ta...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang