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

2024-02-08

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


首先我们要明确什么“以编程方式创建bean”确切的意思是。

但首先我们应该定义什么"bean"方法。在 CDI 中,我们谈论 Bean 有两种含义:

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

元数据通常源自应用程序类。此类元数据“由类支持”。我所说的“由阶级支持”是指所有种类规范中描述 https://docs.jboss.org/cdi/spec/2.0/cdi-spec.html#implementation。即类 bean、生产者方法和生产者字段。

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

  1. Inject javax.enterprise.inject.Instance;参见例如焊接文档 https://docs.jboss.org/weld/reference/latest/en-US/html/injection.html#_obtaining_a_contextual_instance_by_programmatic_lookup
  2. 利用CDI.current().select(Foo.class).get()
  3. 利用 quarkus 特有的Arc.container().instance(Foo.class).get()

但是,如果您想添加/注册组件元数据如果没有类支持(选项 2),您需要添加一个使用 quarkus 特定 SPI 的扩展,例如Bean注册器 https://quarkus.io/guides/cdi-reference#synthetic-beans.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Quarkus 中以编程方式注册 bean? 的相关文章

随机推荐