Annotation Type Stereotype


  • @Retention(RUNTIME)
    @Target(ANNOTATION_TYPE)
    @Documented
    public @interface Stereotype

    Specifies that an annotation type is a stereotype.

    In many systems, use of architectural patterns produces a set of recurring bean roles. A stereotype allows a framework developer to identify such a role and declare some common metadata for beans with that role in a central place.

    A bean may declare zero, one or multiple stereotypes, by applying the stereotype annotation to the bean class or producer method or field.

    A stereotype encapsulates any combination of:

    • a default scope, and
    • a set of interceptor bindings.

    The default scope of a stereotype is defined by annotating the stereotype with a scope type. A stereotype may declare at most one scope. If a bean explicitly declares a scope, any default scopes declared by its stereotypes are ignored.

     @RequestScoped
     @Stereotype
     @Target(TYPE)
     @Retention(RUNTIME)
     public @interface Action {
     }
     

    The interceptor bindings of a stereotype are defined by annotating the stereotype with the interceptor binding types. A stereotype may declare zero, one or multiple interceptor bindings. An interceptor binding declared by a stereotype is inherited by any bean that declares that stereotype.

     @RequestScoped
     @Secure
     @Transactional
     @Stereotype
     @Target(TYPE)
     @Retention(RUNTIME)
     public @interface Action {
     }
     

    A stereotype may also specify that:

    • all beans with the stereotype have defaulted bean EL names, or that
    • all beans with the stereotype are alternatives, or that
    • all beans with the stereotype have predefined @Priority.

    A stereotype may declare an empty @Named annotation, which specifies that every bean with the stereotype has a defaulted name when a name is not explicitly specified by the bean.

     @RequestScoped
     @Named
     @Secure
     @Transactional
     @Stereotype
     @Target(TYPE)
     @Retention(RUNTIME)
     public @interface Action {
     }
     

    A stereotype may declare an @Alternative annotation, which specifies that every bean with the stereotype is an alternative.

     @Alternative
     @Stereotype
     @Target(TYPE)
     @Retention(RUNTIME)
     public @interface Mock {
     }
     

    A stereotype may declare a @Priority annotation, which specifies that every bean with the stereotype is enabled and has given priority.

     @Alternative
     @Priority(1)
     @Stereotype
     @Target(TYPE)
     @Retention(RUNTIME)
     public @interface Mock {
     }
     

    A stereotype may declare other stereotypes. Stereotype declarations are transitive. A stereotype declared by a second stereotype is inherited by all beans and other stereotypes that declare the second stereotype.

    Author:
    Pete Muir, Gavin King
    See Also:
    the built-in stereotype Model