JBoss Weld:为测试注入不同的实现

时间:2012-02-09 09:19:24

标签: java jboss-weld

我想在bean中注入一个不同的实现,具体取决于上下文。情况如下:

interface A{}

class AImplForTest implements A{}

class AImplForProd implements A{}

class B{
    @Inject A a;
}

在测试环境中,我希望注入AImplForTest,而在生产环境中,这应该是AImplForProd。 B在两种情况下是同一类。有可能吗?

2 个答案:

答案 0 :(得分:1)

从未在实践中使用过,但从理论上讲,您可以使用@Alternative注释。

来自Weld reference documentation

  

替代品是bean,其实现特定于a   特定客户端模块或部署方案。 ... 默认情况下,   @Alternative bean被禁用。我们需要启用替代方案   bean归档文件的beans.xml描述符,使其可用   实例化和注入。此激活仅适用于bean   在该档案中。

答案 1 :(得分:0)

您可以通过使用@Named注释定义每个实现类,然后通过@Inject @Named(“ ForTest”)A注入所需的类来实现此目的。如果您还没有找到任何解决方案,希望对您有帮助。

interface A{}

@Named("ForTest")
class AImplForTest implements A{}

@Named("ForProd")
class AImplForProd implements A{}

class B{
   @Inject @Named("ForTest") A a;
}