我目前正在尝试替换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
或者如果我不应该使用它,为什么这不是一个合适的用途?
(警告。我在 @Alternative
领域,但我认为我理解这个问题,可以准确地回答)。)
我认为问题在于,如果不使用 @Priority
你只能对bean存档进行断言,而且你的bean存档和DeltaSpike的bean存档是不一样的。LocaleResolver
是有来源的。 我的理解是 在CDI 1.1+中,唯一的方法是导致 全应用 @Alternative
选择发生在与 @Priority
注释.