【发布时间】:2017-09-20 18:19:49
【问题描述】:
我有一个 Spring Boot 应用程序,我想列出所有数据存储库以及每个存储库的所有方法。我怎样才能做到这一点?
【问题讨论】:
标签: spring spring-boot reflection repository
我有一个 Spring Boot 应用程序,我想列出所有数据存储库以及每个存储库的所有方法。我怎样才能做到这一点?
【问题讨论】:
标签: spring spring-boot reflection repository
这是leveragesspring-data-commons的一种方法
Repositories repositories = new Repositories(context.getBeanFactory());
Iterator it = repositories.iterator();
while(it.hasNext()) {
Class<?> domainClass = (Class<?>) it.next();
//Get Repositories
repositories.getRepositoryFor(domainClass);
//Get Query Methods
List<QueryMethod> methods = repositories.getQueryMethodsFor(domainClass);
}
注意:以上代码仅获取自动实现的 Spring Data Query 方法。如果您需要所有 Query 方法,包括来自提供的接口(例如 CrudRepository)的方法以及自定义 Query 方法实现,请使用以下方法:
Repositories repositories = new Repositories(context.getBeanFactory());
Iterator it = repositories.iterator();
while(it.hasNext()) {
Class<?> domainClass = (Class<?>) it.next();
Advised repoProxy = (Advised)repositories.getRepositoryFor(domainClass);
Class<?>[] interfaces = repoProxy.getProxiedInterfaces();
List<Method> methods = Arrays.stream(interfaces)
.flatMap(c -> Arrays.stream(ReflectionUtils.getAllDeclaredMethods(c)))
.collect(toList());
}
【讨论】:
List<BaseRepository> repositories 之类的东西。