如何解决在Micronaut中按名称获取bean
我有一个看起来像的界面。
interface Task {
void run(String param);
}
我有许多用@Named(“ same_name”)注释的实现
我想要一个类似于Spring的实现:
@Inject
ApplicationContext appContext
void execTask(String name,String param) {
Task task = appContext.getBeam(Task.class,name);
task.run(param);
}
我设法通过在bean定义中搜索注释来做到这一点,类似于:
(Groovy中的代码)
void execTask(String name,String param) {
Collection<BeanDefinition<Task>> definitions = appContext.getBeanDefinitions(Task)
BeanDefinition<Task> definition = definitions.find { BeanDefinition<Task> it ->
it.getAnnotation(Named)?.stringValue()?.filter {it == name }?.present
}
Task task = appContext.getBean(Task,definition.declaredQualifier)
task.run(param)
}
但是看起来很简单。
还有更直接的方法吗?
解决方法
您可以检索具有名称限定符的bean:
import io.micronaut.inject.qualifiers.Qualifiers
// ...
void execTask(String name,String param) {
Task task = appContext.getBean(Task.class,Qualifiers.byName(name));
task.run(param);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。