获取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 @   晚灯  阅读(937)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示