获取spring容器中接口的实现类或者子类<T> Map<String, T> getBeansOfType(@Nullable Class<T> type)的对象
获取ApplicationContext
@Autowired
ApplicationContext applicationContext;
使用applicationContext中的getBeansOfType方法可以拿到一个Map这个map的key就是bean的名称,value就是对象,这里的value就像自己平常new的一个对象一样,正常使用即可
获取ImportClientBootstrapBase的所有子类:
Map<String, ImportClientBootstrapBase> beansOfType = applicationContext.getBeansOfType(ImportClientBootstrapBase.class);
ImportClientBootstrapBase类的代码:
public abstract class ImportClientBootstrapBase {
public abstract String tableDefineConfDirPath();
public abstract String defineTemplateConfDirPath();
}
ImportClientBootstrapBase子类ImportClientBootstrap的代码:
@Component
public class ImportClientBootstrap extends ImportClientBootstrapBase {
@Override
public String tableDefineConfDirPath() {
//表定义
return "classpath*:define_table/core/*.json";
}
@Override
public String defineTemplateConfDirPath() {
//模板定义
return "classpath*:define_upload_template/core/*.json";
}
}
现在通过applicationContext的getBeansOfType()方法获取到ImportClientBootstrapBase的实现类或者子类,然后就可以调用ImportClientBootstrapBase中的方法或者属性了
Map<String, ImportClientBootstrapBase> beansOfType = applicationContext.getBeansOfType(ImportClientBootstrapBase.class);
//遍历子类
for (String key : beansOfType.keySet()) {
ImportClientBootstrapBase baseDefinitionInitializationRunner = beansOfType.get(key);
String tablePackagePaths = baseDefinitionInitializationRunner.tableDefineConfDirPath();
String templatePackagePaths = baseDefinitionInitializationRunner.defineTemplateConfDirPath();
System.out.println(tablePackagePaths + templatePackagePaths )//classpath*:define_table/core/*.jsonclasspath*:define_upload_template/core/*.json
}