【问题标题】:Get bean by name in Micronaut在 Micronaut 中按名称获取 bean
【发布时间】:2021-02-09 16:25:26
【问题描述】:

我有一个类似的界面。

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

但对于一些简单的事情来说似乎很多。

有没有更直接的方法?

【问题讨论】:

    标签: java micronaut


    【解决方案1】:

    您可以使用名称限定符检索 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);
    }
    

    【讨论】:

      猜你喜欢
      • 2011-05-05
      • 2021-02-15
      • 1970-01-01
      • 2012-06-17
      • 2020-12-14
      相关资源
      最近更新 更多