我正在使用两个可能的部署环境,使用@Alternative (或者更具体地说,是@原型)注释来选择一个项目。我们叫他们envDefault和envAlt。我正在寻找一种方法来定义一个bean,它为envAlt定义了一个@Alternative,但对于envDefault没有@默认实现。我认为这是可行的,因为bean没有注入到任何常见的实现中,导致创建它的操作(它@观察特定事件)不会在envDefault中发生。但是CDI无法启动应用程序,原因是WeldStartService验证中典型的“带有限定符@Default”的“不满意的依赖项”异常。
是否有一种方法可以放松对这个特定bean的CDI验证,以允许envDefault部署而不使用@Default实现?
编辑:供参考,因为它已得到答复:
interface AltOnlyInterface {}
@Alternative
class AltOnlyBean implements AltOnlyInterface {}
//no default implementation of AltOnlyInterface
interface OtherInterface {}
//AltOnlyInterface is not use in default environment
class RegularOtherBean implements OtherInterface {}
@Alternative
class AltOtherBean implements OtherInterface {
@Inject
AltOnlyInterface altOnlyBean;
}发布于 2014-09-01 19:08:27
如果没有默认实现,则应:
如果您想要有两个环境,而其中一个环境有这个bean。您需要用@Alternative对bean进行注释,并在一个环境中启用它。在第二个环境中,除非在注入点有实例,否则它将失败。
https://stackoverflow.com/questions/25483095
复制相似问题