首页 > 解决方案 > 如果没有定义其他生产者,则定义 @Default 生产者

问题描述

当我有一个在某些环境中提供的 bean 生产者时,我怎样才能注释我的可用,就@Default好像没有其他可用一样?

给定生产者方法

@Produces 
public Foo produce() 

以及我无法控制的代码中的另一种生产者方法:

@Produces 
public Foo produceIt() 

两者都有一个隐式的 @Default 注释和冲突。但第二个并非在所有环境中都可用。

编辑:所以我添加了另一个限定符 @FooProducer 到第一个(我控制),这使它在第二个可用时工作 - 但这删除了隐式 @Default 所以没有生产者(类型匹配但没有 @Default found) 如果第二个不在 classath 上,则可用。

如果第二个生产者不可用,如何将第一个生产者注释为默认生产者,如果有另一个默认生产者不冲突?

标签: javawildflycdi

解决方案


Weld的文档看来,将您的生产者声明为 @Alternative 并使用任何 @Priority 全局启用它应该可以解决问题:

@Priority(100)
public class YourFactory {

    @Produces @Alternative
    public Foo produce() 
}

推荐阅读