java - 动态生成 Spring Data Repository

标签 java spring spring-data spring-data-jpa spring-data-mongodb

我正在努力创建一个基于 spring-data 的库,以便它能够动态生成 Spring Data 存储库。我希望创建一个在 Spring Data 抽象上运行的该过程的通用包装器。

这种方式取决于添加到类路径示例中的依赖项:spring-data-jpaspring-data-mongodb 我将能够生成存储库并注入(inject)他们进入我的 Spring 背景。

我很难找到关于如何执行此操作的良好文档。有什么想法吗?

最佳答案

Spring 提供了一个 @Conditional 注解,用于根据类路径控制选择哪些 bean/配置(与 spring-boot 自动配置类似)。

您可以定义两个配置类,Spring 根据您的类路径选择它们。 例如:

  1. 类路径上存在的 JPA 的配置可能看起来像这样。

    @Configuration
    @EnableJpaRepositories(basePackages=...)
    @Conditional(JpaClassPathCondition.class)
    public class JpaAutoConfiguration {
    
        static class JpaClassPathCondition implements Condition {
    
            @Override
            public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
                return ClassUtils.isPresent("javax.persistence.EntityManager", JpaAutoConfiguration.class.getClassLoader());
            }
         }
    }
    
  2. MongoDB 配置:

    @Configuration
    @EnableMongoRepositories(...)
    @Conditional(MongoClassPathCondition.class)
    public class MongoAutoConfiguration {
    
        static class MongoClassPathCondition implements Condition {
    
            @Override
            public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
                return !ClassUtils.isPresent("javax.persistence.EntityManager", MongoAutoConfiguration.class.getClassLoader()); )//or whatever classpath element fits you best
    
            }
         }
    }
    

从现在开始,您需要做的就是在模块中使用这两个配置类,然后让 spring 发挥它的魔力

关于java - 动态生成 Spring Data Repository,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41242355/

相关文章:

java - Spring:Bean 属性不可写或具有无效的 setter 方法

java - 类似于 JAVA 中数据库生成序列的字段的任何注释

java - 如何在Spring Data中进行Mongo聚合查询?

java - JMeter-o.a.j.f.FileToString : Could not read open

Java Firestore Android 在查询中使用数组列表来显示来自关注用户的帖子

Spring - @Configuration 中的 @Autowired bean 为 null

java - 立即发送 Spring 响应流而不是等到方法返回

java - Spring @PageableDefault 默认方向在传递排序后发生变化

java - bufferedwriter 在写入过程中停止

java - 无法访问提供者类的方法