如何在Spring Boot中检索所有Data Repository方法

时间:2017-09-20 18:19:50

标签: spring spring-boot reflection repository

我有一个Spring Boot应用程序,我想列出所有数据存储库以及每个存储库的所有方法。我怎么能做到这一点?

1 个答案:

答案 0 :(得分:0)

以下是leverages spring-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());
}