【问题标题】:How to retrieve all Data Repository methods in Spring Boot如何在 Spring Boot 中检索所有 Data Repository 方法
【发布时间】:2017-09-20 18:19:49
【问题描述】:

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

【问题讨论】:

    标签: spring spring-boot reflection repository


    【解决方案1】:

    这是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());
    }
    

    【讨论】:

    • 感谢@KyleAnderson,这正是我想要的!
    • getQueryMethodsFor() 不会从自定义存储库 (docs.spring.io/spring-data/jpa/docs/current/reference/html/…) 返回查询方法。我怎么能得到这些方法?
    • @JoseRomero 我在我的答案中添加了另一个满足您要求的选项。
    • @KyleAnderson 我需要一份所有存储库的列表。我怎样才能通过使用这个类来做到这一点?您可以找到有关我的用例 here 的更多详细信息。我有一个类,我所有的存储库都扩展了它。我需要List&lt;BaseRepository&gt; repositories 之类的东西。
    • 上下文从何而来?这是一个变量吗?
    猜你喜欢
    • 2017-03-31
    • 2018-10-18
    • 2013-08-11
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    • 2021-06-26
    • 2022-12-24
    • 2019-02-21
    相关资源
    最近更新 更多