我试图找到一种方法,如何在Quarkus DI中程序化地创建bean,但没有成功。在这个框架中可以吗?似乎 BeanManager
还没有实现所需的方法。
首先,我们应该明确什么是 "BeanManager"?"程序化地创建bean" 究竟是什么意思。
但首先,我们应该定义什么是 "豆子" 的意思。在CDI中,我们讲的bean有两种含义。
javax.enterprise.inject.spi.Bean
元数据通常来自于应用类。这种元数据是 "由类支持的"。所谓 "由类支持 "是指所有种类的 按规格. 这就是类豆,生产者方法和生产者字段。
现在,如果你想 在程序上获得一个组件实例 (选项2),你可以。
javax.enterprise.inject.Instance
;例如,见 焊缝文件CDI.current().select(Foo.class).get()
Arc.container().instance(Foo.class).get()
但是,如果你想 添加注册组件元数据 (选项2),你需要添加一个扩展,使用夸克司专用的SPI,例如 BeanRegistrar.
你可以使用Instance注入你的Bean。
@Inject
public TestExecutorService(final ManagedExecutor managedExecutor,
final Instance<YourTask> YourTask) {
this.managedExecutor = managedExecutor;
this.YourTask= YourTask;
}
如果你需要创建多个Instance,你可以使用托管执行器。
tasks.forEach(task -> managedExecutor.submit(task::execute));
请记住,根据你启动Bean的方式,你可能需要销毁它,只有 "创建者类 "有它的引用,这意味着你必须在同一个classe中创建和销毁Bean(你可以使用类似事件的东西来处理)。
更多信息请查看 CDI文档