我正在努力创建一个基于 spring-data 的库,以便它能够动态生成 Spring Data 存储库。我希望创建一个在 Spring Data 抽象上运行的该过程的通用包装器。
这种方式取决于添加到类路径示例中的依赖项:spring-data-jpa
或 spring-data-mongodb
我将能够生成存储库并注入(inject)他们进入我的 Spring 背景。
我很难找到关于如何执行此操作的良好文档。有什么想法吗?
最佳答案
Spring 提供了一个 @Conditional
注解,用于根据类路径控制选择哪些 bean/配置(与 spring-boot
自动配置类似)。
您可以定义两个配置类,Spring 根据您的类路径选择它们。 例如:
类路径上存在的 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()); } } }
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/