如何在AfterBeanDiscovery期间以编程方式将生产者方法添加到CDI容器?

时间:2016-12-20 19:45:32

标签: cdi

我知道如何在Bean期间将AfterBeanDiscovery添加到CDI容器中。我的问题是我真正需要做的就是相当于添加一个新的生产者方法,相当于一个特别合格的参数。

也就是说,我想以某种方式以编程方式创建其中的几个:

@Produces
@SomeQualifier("x")
private Foo makeFoo(@SomeQualifier("x") final FooMaker fm) {
  return fm.makeFoo();
}

... SomeQualifier value元素范围的域仅在AfterBeanDiscovery时知道。换句话说,其他一些可移植扩展已在容器中安装了两个FooMaker个实例:FooMaker - 限定者 - @SomeQualifier("x")FooMaker - 限定者 - {{1 }}。现在我需要做相当于制作两个生产者方法来匹配"它们。

@SomeQualifier("y")不是一种选择;我希望这个解决方案在容器启动时进行,而不是在注射时进行。

我知道Nonbinding的{​​{1}}方法,但是我必须通过数十行甚至数百行的体操来添加正确的限定符注释每个BeanManager"可到达"从getProducerFactory开始,我必须手工制作(以避免泛型问题)让我觉得我在这里远离人迹罕至的道路。

更新:在我的扩展程序中,我创建了一个AnnotatedParameter方法,该方法返回AnnotatedMethod,并且具有private static参数。我已用手工Foo将其封装在FooMaker方法中报告AnnotatedMethod等,并从SomeQualifier("x")报告getAnnotations()等。 } {' s SomeQualifier("x")方法。然后我从AnnotatedParameter获得getAnnotations()并将其提供给我创建的新ProducerFactory,我在其中使用它来实现BeanManagerBean方法。一切都在编译等等。

(但是,Weld(特别是)会因为这种用法而爆炸,这让我觉得我在做Really Bad Things™。)

0 个答案:

没有答案