Dependency injection Micronaut:API为通过@EachBean构建的bean检索@Named值?

Dependency injection Micronaut:API为通过@EachBean构建的bean检索@Named值?,dependency-injection,micronaut,Dependency Injection,Micronaut,我有以下资料: @Context @EachProperty("some.property") public class MyCfg { public MyCfg(@Parameter String name) { // ... } } @Factory public class MyFactory { @Context @EachBean(MyCfg.class) public MyBean build(MyCfg cfg) {

我有以下资料:

@Context
@EachProperty("some.property")
public class MyCfg {
    public MyCfg(@Parameter String name) {
        // ...
    }
}

@Factory
public class MyFactory {
    @Context
    @EachBean(MyCfg.class)
    public MyBean build(MyCfg cfg) {
        // ...
    }
}
我从文档中读到,
MyBean
的实例应该继承
MyCfg
中的
@Named
名称,事实上我可以将它们(例如,作为构造函数参数)注入
@Named(“somename”)MyBean

但是,如果我通过
BeanContext
检索他们的
BeanDefinition
programmaticaly,我似乎无法访问实例名称

例如:

@EventListener
void onShutdown(ShutdownEvent event) {
    event.getSource().getBeanRegistrations(MyBean.class).forEach(br -> {
        log.info("Shutting down {}", br.getBeanDefinition().stringValue(Named.class)));
        br.getBean().close();
    });
}
打印
关闭可选.empty
,而我希望它打印
applicationon.yml
some.property
下的任何名称


您能帮忙吗?

bean注册只存在一次。您应该寻找bean定义
beanContext.getBeanDefinitions(…)
如果您的目标是在关闭时简单地关闭Bean,那么您可以简单地将
@Bean(preDestroy=“close”)
添加到工厂方法中

Nope–命名的
@Named
的全部目的是拥有同一类的多个Bean(并区分它们)。顺便说一句,我发布的@EventListener是我用来关闭连接池(我有2个连接池)的工具,除了日志消息中的“Optional.empty”之外,它还能工作。我知道@Named的用途。我的建议行得通