gpt4 book ai didi

java - 在 Micronaut 中按名称获取 bean

转载 作者:行者123 更新时间:2023-12-04 13:11:39 25 4
gpt4 key购买 nike

我有一个看起来像的界面。

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);
}

关于java - 在 Micronaut 中按名称获取 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64553631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com