相当于Spring Boot中的javax.enterprise.inject.Instance用于动态注入

时间:2017-10-21 10:54:07

标签: java spring-boot dependency-injection cdi

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

只是注释:

@Inject
private Instance<CCIntentHandler> allMycandidates;

将使allMycandidates填充在我的类路径中继承CCIntentHandler接口的所有类,然后我可以简单地迭代:

Iterator<CCIntentHandler> iterator = allMycandidates.iterator()

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

由于

1 个答案:

答案 0 :(得分:3)

如果您Foo @Autowire,则Spring会注入List<Foo>的所有实例。

所以,Spring相当于......

@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