选定的Java CDI替代方案没有优先权

问题描述 投票:0回答:1

我目前正在尝试替换DeltaSpike提供的一个默认实现(LocaleResolver)与我自己通过 @Alternative 注释。

@Alternative
@RequestScoped
public class MyLocaleResolver implements LocaleResolver {

}

而在 beans.xml

<alternatives>
  <class>org.example.project.i18n.MyLocaleResolver</class>
</alternatives>

然而,我似乎没有做什么使 MyLocaleResolver 选定的豆子,而不使用 @Priority或使用 @Specializes 而不是 @Alternative.

比如下面两种就完全可以用。

@Priority(1)
@Alternative
@RequestScoped
public class MyLocaleResolver implements LocaleResolver {

}
@Specializes
@RequestScoped
public class MyLocaleResolver extends DefaultLocaleResolver {

}

我不介意使用上述两个解决方案中的一个, 但我更喜欢不明白,如果我做什么与 @Alternative 是错误的,为什么我应该先选择其他的一个,据我所知,在CDI 1.1+的情况下,应该可以从库中覆盖豆子的替代品。

有谁能指导我如何使 @Alternative 不劳而获 @Priority或者如果我不应该使用它,为什么这不是一个合适的用途?

java cdi weld deltaspike
1个回答
2
投票

(警告。我在 @Alternative 领域,但我认为我理解这个问题,可以准确地回答)。)

我认为问题在于,如果不使用 @Priority 你只能对bean存档进行断言,而且你的bean存档和DeltaSpike的bean存档是不一样的。LocaleResolver 是有来源的。 我的理解是 在CDI 1.1+中,唯一的方法是导致 全应用 @Alternative 选择发生在与 @Priority 注释.

© www.soinside.com 2019 - 2024. All rights reserved.