我正在玩Spring引导,并试图创建一个库。
作为其中的一部分,我有一个接口。
interface Dummy {
String doSomething(String input);
}
可能有多种实现。
public class DummyImplA implements Dummy {}
public class DummyImplB implements Dummy {}
public class DummyImplC implements Dummy {}
我想查找作为Beans @Bean
或@Component
公开的所有实现并在应用程序启动时自动调用doSomething方法。
spring是否提供了扫描特定类型的bean的选项?
如果我理解您的问题,您希望获得特定类型的所有bean。有很多方法可以做到这一点。
选项1:自动连接弹簧组件中的假人列表
@Component
public class SpringComponent {
private List<Dummy> listDummy;
public SpringComponent (List<Dummy> list) {
listDummy = list;
}
//In a method, iterate on listDummy and call doSomething method.
public void callDoSomething() {
for(Dummy d : listDummy) {
d.doSomething();
}
}
}
选项2:自动连线弹簧组件中的假人映射
@Component
public class SpringComponent {
private final Map<String, Dummy> mapDummies;
public SpringComponent(Map<String, Dummy> mapD) {
mapDummies = mapD;
}
public void callDoSomething() {
for (Map.Entry<String, Dummy> entry : mapDummies.entrySet()) {
entry.getValue().doSomething();
}
}
}
选项3:自动连接applicationContext并从中获取Dummy类型的所有bean有几种方法可以获取或自动连接applicationContext。
@Component
public class SpringComponent {
ConfigurableApplicationContext applicationContext;
public SpringComponent(ConfigurableApplicationContext ac) {
applicationContext = ac;
}
public void getBeanOfDummy() {
Map <String, Dummy> mapDummies = applicationContext.getBeansOfType(Dummy.class);
for (Map.Entry<String, Dummy> entry : mapDummies.entrySet()) {
entry.getValue().doSomething();
}
}
}