我正在开发一个项目,其中包含两个可能的部署环境,使用@Alternative(或更具体地说是@Stereotype)注释进行选择。我们称之为envDefault和envAlt。 我正在寻找一种方法来定义一个bean,它具有为envAlt定义的@Alternative,但没有为envDefault实现@Default。我认为这是可行的,因为bean不会在任何常见实现中注入,并且导致其创建的操作(@Observes特定事件)将不会在envDefault中发生。然而,由于WeldStartService验证中典型的“不满意的限定符@Default”异常,CDI无法启动应用程序。
有没有办法放宽对这个特定bean的CDI验证,以允许在没有@Default实现的情况下进行envDefault部署?
编辑: 作为参考,已经回答:
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;
}
答案 0 :(得分:0)
如果没有默认实现,您应该:
创建该实现
或
将所有注入点设为实例
如果你想拥有两个环境,并且只有一个拥有该bean。您需要使用@Alternative
注释bean并在一个环境中启用它。在第二个环境中,除非您在注射点有实例,否则它将失败。