获取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
}

posted @ 2022-09-14 13:33  晚灯  阅读(872)  评论(0编辑  收藏  举报