When using bean-discovery-mode="annotated"
only classes with a bean defining annotation are discovered. All other classes are ignored. Any scope type is a bean defining annotation. If a scope type is declared on a bean class, then the bean class is said to have a bean defining annotation [spec]. The 1.1 spec is not completely clear here. Only classes with a @NormalScope
scope or @Dependent
pseudo scope are discovered, @javax.inject.Singleton
and all other @Scope
(pseudo) scopes are ignored.
Note that the definition of a “bean defining annotation” changed in CDI 1.2 and is now very well defined:
The set of bean defining annotations contains:
- @ApplicationScoped, @SessionScoped, @ConversationScoped and @RequestScoped annotations,
- all other normal scope types,
- @Interceptor and @Decorator annotations,
- all stereotype annotations (i.e. annotations annotated with @Stereotype),
and the @Dependent scope annotation.