Java 如何在beans.xml中指定@Alternative producer方法?

Java 如何在beans.xml中指定@Alternative producer方法?,java,jakarta-ee,dependency-injection,cdi,weld,Java,Jakarta Ee,Dependency Injection,Cdi,Weld,假设我有: public interface Foo {...} public class AltProducer { private Foo altFoo; @Produces @Alternative public Foo getAltFoo() { return altFoo; } } 我需要在beans.xml中放入什么,以便调用AltProducer的@products方法,而不是注入Bar?找到了它-您可以指定整个producer类作为替代方法 @Alternati

假设我有:

public interface Foo {...}

public class AltProducer {
  private Foo altFoo;

  @Produces @Alternative
  public Foo getAltFoo() { return altFoo; }
}

我需要在beans.xml中放入什么,以便调用AltProducer的@products方法,而不是注入Bar?

找到了它-您可以指定整个producer类作为替代方法

@Alternative
public class AltProducer { ... }
beans.xml:

<beans>
  <alternatives>
    <class>com.package.AltProducer</class>
  </alternatives>
</beans>

com.package.AltProducer

您必须在src/main/resources/META-INF中创建一个beans.xml文件,然后

<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">
<beans>
  <alternatives>
    <class>com.package.AltProducer</class>
  </alternatives>
</beans>
</beans>


+1。我觉得很麻烦。
@Alternative
的Javadocs说:
可以应用于bean类、生产者方法或字段
。但这是误导,因为在beans.xml中,我们只能指定
——无法输入生产者方法或字段。您完全正确。在producer方法中使用@Alternative注释毫无意义,因为它不能在beans.xml中启用生成的替换项。CDI 1.1的另一点是,在大多数情况下,当您将父类注释为替换项时,您还需要添加优先级注释,以便在所有BeanDeploymenyArchieves焊缝上启用该替代帐户。所以请记住,在JEE7中,很少使用没有优先权的替代方案。