我正在将代码从JEE迁移到SpringBoot。我在JEE中使用javax.enterprise.inject.Instance类使用酷动态注入:

只是注释:

@Inject
private Instance<CCIntentHandler> allMycandidates;

将使allMycandidates充满在类路径中继承CCIntentHandler接口的所有类,然后可以使用以下方法简单地进行迭代:
Iterator<CCIntentHandler> iterator = allMycandidates.iterator()

不需要了。如何在Spring Boot中实现这一目标?

谢谢

最佳答案

如果您将Foo设为@Autowire,Spring将注入List<Foo>的所有实例。

所以,春天相当于...

@Inject
private Instance<CCIntentHandler> allMycandidates;

...是:
@Autowire
private List<CCIntentHandler> allMycandidates;

更新1 以回应此评论:

CCIntentHandler接口或实现此接口的类是否需要任何Spring注释?

Spring必须知道CCIntentHandler的任何实例,这可以通过以下方式实现:
  • CCIntentHandler注释实现@Component的每个类,并确保这些类已被Spring Boot
  • 扫描

    要么
  • 提供一个公共方法以返回实现CCIntentHandler的每个类,并使用@Bean注释每个公共方法,并确保包含这些公共方法的类被@Configuration注释,并且该配置类由Spring Boot扫描。

  • 有关bean声明和依赖注入in the docs的更多详细信息。

    09-10 08:26
    查看更多