Las clases que utilizan las anotaciones Specializes y Alternative no se inyectan en otros módulos

Esta regla señala las clases que se anotan con las anotaciones @Specializes y @Alternative. Si la clase es referenciada por una clase de otro módulo, la clase no se inyecta en el otro módulo a menos que esté aparezca en <alternativas> en META-INF/beans.xml del otro módulo.

En el siguiente ejemplo, la clase AltClass3 aparece en el archivo jar2/META-INF/beans.xml</code en <alternativas>. La clase no aparece en <alternativas> en el archivo jar1/META-INF/beans.xml.


WEB-INF/lib/jar1: Class1 {
    @Inject @SomeQualifer String foo;
  }
 
WEB-INF/lib/jar2: Class2 { @Produces @SomeQualifer Serie doFoo() { ... } }
  @Alternative @Specializa AltClass3 amplía Class2 { @Produces @SomeQualifer String doFoo() { ... } } 

En la implementación de Contexts and Dependency Injection (CDI) 1.0, Class2 se inyecta y se utiliza como productor para Class1.foo. En la implementación de CDI 1.2, Class2 no se inyecta y la aplicación no se inicia, indicando que no se puede encontrar ningún productor para Class1.foo.

Puede resolver el problema de dos formas:

Para obtener más información sobre la implementación de Java Platform, Enterprise Edition (Java EE) 7 CDI 1.2, consulte Cambios de comportamiento de Contexts and Dependency Injection 1.2.