Stereotype
Date: 2015-09-11

javax.enterprise.inject

## Annotation Type Stereotype

-     @Retention(value=RUNTIME)
      @Target(value=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.

  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 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.

  See Also:
    `the built-in stereotype `@Model``