Java 生成聚合树的限定符

Java 生成聚合树的限定符,java,jakarta-ee,cdi,Java,Jakarta Ee,Cdi,我想创建CDIBean的多个实例,并根据限定符在聚合树的下一步选择接口的实现 在下面的示例中,我使用限定符创建了控制器的两个实例。控制器是核心库的一部分,在本例中,核心库包含许多类。我希望能够根据限定符为两个不同的控制器选择不同的存储库实现 我可以创建一个@Producer来在两个存储库实现之间进行选择,但我不知道如何确定返回哪个实例。我无法访问在控制器的注入点指定的限定符,只能访问存储库的注入点 目前,我们有两个存储库实现生活在不同的war中,它们依赖于核心库,解决了这个问题,但我希望能够改变

我想创建CDIBean的多个实例,并根据限定符在聚合树的下一步选择接口的实现

在下面的示例中,我使用限定符创建了控制器的两个实例。控制器是核心库的一部分,在本例中,核心库包含许多类。我希望能够根据限定符为两个不同的控制器选择不同的存储库实现

我可以创建一个@Producer来在两个存储库实现之间进行选择,但我不知道如何确定返回哪个实例。我无法访问在控制器的注入点指定的限定符,只能访问存储库的注入点

目前,我们有两个存储库实现生活在不同的war中,它们依赖于核心库,解决了这个问题,但我希望能够改变这一点

应用
类MyApplication{
@注入
@组件(“comp1”)
控制器1;
@注入
@组件(“comp2”)
控制器2;
}
@组件(“comp1”)
公共类Comp1Repository实现存储库{
}
@组件(“comp2”)
公共类Comp2Repository实现存储库{
}
核心库
公共接口存储库{
}
公共类控制器{
@注入
储存库;
}
我想我知道你想要什么。这样行吗

@Produces
@Component("comp1")
@Dependent // or whatever scope you need
private Controller makeAppropriateController(@Component("comp1") final Repository comp1Repository) {
  return makeController(comp1Repository); // however you do it
}

@Produces
@Component("comp2")
@Dependent // or whatever scope you need
private Controller makeAppropriateController(@Component("comp2") final Repository comp2Repository) {
  return makeController(comp2Repository); // however you do it
}

谢谢你的回复。是的,这对示例有效,不幸的是,我简化了示例。在实际情况中,控制器和存储库之间可能存在任意数量的聚合bean