通过BeanConfigurator创建合成bean时,进行注入需要什么?

时间:2019-01-26 03:03:27

标签: cdi cdi-2.0

我正在通过AfterBeanDiscovery#addBean()方法创建一个合成bean。

有问题的Java类中有一个public void update(Foo foo)方法。我希望使其表现得像这样写:

@Inject
public void update(@SomeQualifier Foo foo)

...但是我实际上不能更改源代码。换句话说,我想:

  • 以编程方式将@Inject添加到方法(或等效方法)
  • 以编程方式将@SomeQualifier作为限定符添加到Foo参数(或等效参数)
  • 使容器以“常规”方式实例化此合成bean,即,将以正常CDI方式使用注入的update限定的@SomeQualifier调用Foo方法

我该怎么做才能使用bean配置器API向容器指示我希望Foo类型的参数是@SomeQualifier限定的注入点,例如当容器创建我的合成bean时,foo的值也将被正确注入吗?

仅调用BeanConfigurator#addInjectionPoint(InjectionPoint)无效,即使我从其InjectionPoint方法的返回值中手动创建一个@SomeQualifier的{​​{1}}实现。

我会使用getQualifiers(),但是我没有InjectionTargetFactory方法中需要的Bean句柄,因为毕竟我正在创建Bean首先。

我可以通过使用更麻烦的createInjectionTarget(Bean)方法来解决此问题,但这需要手动创建一个BeanManager#createBean(BeanAttributes, Type, InjectionTargetFactory)实现。我希望可以通过bean配置器API以编程方式完成所有这些工作。

0 个答案:

没有答案