Java CDI select 没有优先权的备选方案
Java CDI select alternative without priority
我正在尝试通过 @Alternative
.
将 DeltaSpike (LocaleResolver
) 提供的默认实现替换为我自己的实现
@Alternative
@RequestScoped
public class ExampleLocaleResolver implements LocaleResolver {
}
<alternatives>
<class>org.example.app.ExampleLocaleResolver</class>
</alternatives>
似乎使 ExampleLocaleResolver
成为所选 bean 的唯一方法是使用 @Priority
或 @Specializes
。
例如,以下两个工作得很好:
@Priority(1)
@Alternative
@RequestScoped
public class MyLocaleResolver implements LocaleResolver {
}
@Specializes
@RequestScoped
public class MyLocaleResolver extends DefaultLocaleResolver {
}
我的理解是,使用 CDI 1.1+,应该可以用替代品覆盖库中的 bean,而无需任何黑客攻击。
有人可以帮我理解为什么我无法在没有 @Priorty
注释的情况下注入 @Alternative
bean 吗?
(警告:我在@Alternative
方面比较弱,但我认为我理解并能准确回答。)
我认为问题在于,如果不使用 @Priority
,您只能对 bean 存档进行断言,并且您的 bean 存档与 DeltaSpike LocaleResolver
所在的 bean 存档不同来源。我的理解是in CDI 1.1+ the only way to cause application-wide @Alternative
selection to happen is with the @Priority
annotation.
我正在尝试通过 @Alternative
.
LocaleResolver
) 提供的默认实现替换为我自己的实现
@Alternative
@RequestScoped
public class ExampleLocaleResolver implements LocaleResolver {
}
<alternatives>
<class>org.example.app.ExampleLocaleResolver</class>
</alternatives>
似乎使 ExampleLocaleResolver
成为所选 bean 的唯一方法是使用 @Priority
或 @Specializes
。
例如,以下两个工作得很好:
@Priority(1)
@Alternative
@RequestScoped
public class MyLocaleResolver implements LocaleResolver {
}
@Specializes
@RequestScoped
public class MyLocaleResolver extends DefaultLocaleResolver {
}
我的理解是,使用 CDI 1.1+,应该可以用替代品覆盖库中的 bean,而无需任何黑客攻击。
有人可以帮我理解为什么我无法在没有 @Priorty
注释的情况下注入 @Alternative
bean 吗?
(警告:我在@Alternative
方面比较弱,但我认为我理解并能准确回答。)
我认为问题在于,如果不使用 @Priority
,您只能对 bean 存档进行断言,并且您的 bean 存档与 DeltaSpike LocaleResolver
所在的 bean 存档不同来源。我的理解是in CDI 1.1+ the only way to cause application-wide @Alternative
selection to happen is with the @Priority
annotation.