获取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
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?