动态生成 Spring 个数据存储库

Dynamically generating Spring Data Repositories

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

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

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

Spring 提供了一个 @Conditional 注释,用于控制根据类路径选择哪个 beans/configurations(类似于 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 发挥它的魔力