我正在将代码从JEE迁移到SpringBoot。我在JEE中使用javax.enterprise.inject.Instance类进行了很酷的动态注入:
只是注释:
@Inject
private Instance<CCIntentHandler> allMycandidates;
将使allMycandidates填充在我的类路径中继承CCIntentHandler接口的所有类,然后我可以简单地迭代:
Iterator<CCIntentHandler> iterator = allMycandidates.iterator()
不再需要了。如何在Spring Boot中实现这一目标?
由于
答案 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。