gpt4 book ai didi

java - Weld -001409 : Ambiguous dependencies for type T with qualifiers @Default

转载 作者:行者123 更新时间:2023-11-30 02:25:52 25 4
gpt4 key购买 nike

我有 2 颗 bean 。

第一个是我在生产中使用的模型,Model

@Named("model")
@RequestScoped
public class Model{

}

第二个是我用于测试的 Model 扩展。

@Named("modelTest")
@RequestScoped
public class ModelTest extends Model{

}

如何强制 CDI 默认选择 Model

最佳答案

由于您想更改给定类型的“默认”bean 并且不想使用限定符,因此我假设原始 bean 不会注入(inject)到任何地方。因此,您可能追求的是替代方案或特化。

如果我们谈论替代品,您需要使用@Alternative注释标记新bean并“选择”它 - 这可以在每个bean存档上完成基于 beans.xml 或简单地使用 @Priority(int) 全局。这是一个代码片段:

@Named("modelTest")
@RequestScoped
@Alternative
@Priority(1) // "activates"/selects the alternative
public class ModelTest extends Model{
}

使用选定的替代方案,每当您注入(inject)先前的类型 (Model) 时,CDI 都会注入(inject)此替代方案 (ModelTest),因为它也适合注入(inject)点.

第二个选项是特化。它与替代品非常相似,但在某种程度上更严格,原始 bean 被“丢弃”,您可以在 CDI spec 中阅读更多相关信息。 。特化还附带限定符和 bean 名称继承(但不是范围!)。也不需要选择 bean(与替代品相反)。这是代码:

@RequestScoped
@Specializes
public class ModelTest extends Model{
// bean name with be inherited automatically as "model"
}

请注意,根据规范,一个 Bean 一次只能有一个 Bean 名称。因此,如果您继承一个名称并声明另一个名称,您将收到错误 - 相应地更改您的代码。

关于java - Weld -001409 : Ambiguous dependencies for type T with qualifiers @Default,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45676495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com