如何在 Quarkus 中以编程方式注册 bean?

Mej*_*jmo 10 quarkus

我正在尝试找到一种在 quarkus DI 中以编程方式创建 bean 的方法,但没有成功。在这个框架下可以吗?似乎BeanManager还没有实现所需的方法。

Mar*_*uba 10

首先,我们应该澄清“以编程方式创建 bean”的确切含义。

但首先,我们应该定义“bean”的含义。在 CDI 中,我们谈论 Bean 有两种含义:

  1. 组件元数据——描述组件属性以及如何创建组件实例;SPI 是javax.enterprise.inject.spi.Bean
  2. 组件实例——应用程序中使用的真实实例;在规范中我们称之为“上下文参考”。

元数据通常源自应用程序类。此类元数据“由类支持”。我所说的“由类支持”是指规范中描述的所有类型。即类 bean、生产者方法和生产者字段。

现在,如果您想以编程方式获取组件实例(选项 2),您可以:

  1. 注射javax.enterprise.inject.Instance;例如,请参阅焊接文档
  2. 利用CDI.current().select(Foo.class).get()
  3. 利用 quarkus 特有的Arc.container().instance(Foo.class).get()

但是,如果您想要添加/注册不受类支持的组件元数据(选项 2),则需要添加一个使用 quarkus 特定 SPI 的扩展,例如BeanRegistrar