- JBoss Weld CDI for Java Platform
- Ken Finnegan
- 133字
- 2021-08-13 16:49:55
Alternatives
Alternatives are explicitly declared within beans.xml
for them to be considered by the container for typesafe resolution, as they are disabled by default. One of the common uses of alternatives is for different deployment scenarios, such as for test deployments.
To create an alternative, a bean only requires the @Alternative
annotation to be present on its type:
@Alternative @Admin @User public class MockAccount implements Account { ... }
Activation of the alternative, for beans within the same archive, would need a beans.xml
with:
<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd"> <alternatives> <class>org.cdibook.chapter2.alternatives.MockAccount</class> </alternatives> </beans>
Note
If an injection point has ambiguous dependencies during container startup, the container will look for any bean that is an alternative amongst the list of eligible beans. If there is only one alternative bean that is eligible, it will be injected instead of causing a deployment exception.