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的用途。我的建议行得通