在没有 beans.xml 的情况下注册带注释的 CDI bean

Register annotated CDI beans without beans.xml

我们有一些带注释的 CDI bean,我们需要在没有 beans.xml 的情况下注册这些 bean。当然,我们正在使用 CDI 扩展机制,但我找不到注册 bean 的简单方法。当我们使用 beans.xml 时,我们只是说 "all" 并且它会注册所有带注释的 bean。在 CDI 扩展中呢?

例如,

abc.scanPackage("com.abc") // register all annotated beans in com.abc package

在 CDI 扩展中,您可以观察 BeforeBeanDiscovery event and explicitly add an AnnotatedType via BeforeBeanDiscovery#addAnnotatedType() which you create via BeanManager#createAnnotatedType(),传递您的 bean class:

public void beforeBean(@Observes BeforeBeanDiscovery beforeBeanDiscovery, BeanManager beanManager) {
    beforeBeanDiscovery.addAnnotatedType(beanManager.createAnnotatedType(YourBean.class));
}