动态生成Spring Data Repositories

时间:2016-12-20 12:26:58

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

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

这种方式取决于添加到类路径示例的依赖项:spring-data-jpaspring-data-mongodb我将能够生成存储库并将它们注入到我的spring上下文中。

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

1 个答案:

答案 0 :(得分:3)

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
    
            }
         }
    }
    
  3. 从这一点开始,您需要做的就是在模块中使用这两个配置类,让Spring做到这一点