动态生成 Spring 个数据存储库
Dynamically generating Spring Data Repositories
我正在努力创建一个基于 spring-data 的库,以便它能够动态生成 Spring 数据存储库。我希望创建一个在 Spring 数据抽象上运行的这个过程的通用包装器。
这种方式取决于添加到类路径示例的依赖项:spring-data-jpa
或 spring-data-mongodb
我将能够生成存储库并将它们注入到我的 spring 上下文中。
我很难找到有关如何执行此操作的良好文档。有什么想法吗?
Spring 提供了一个 @Conditional
注释,用于控制根据类路径选择哪个 beans/configurations(类似于 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 发挥它的魔力
我正在努力创建一个基于 spring-data 的库,以便它能够动态生成 Spring 数据存储库。我希望创建一个在 Spring 数据抽象上运行的这个过程的通用包装器。
这种方式取决于添加到类路径示例的依赖项:spring-data-jpa
或 spring-data-mongodb
我将能够生成存储库并将它们注入到我的 spring 上下文中。
我很难找到有关如何执行此操作的良好文档。有什么想法吗?
Spring 提供了一个 @Conditional
注释,用于控制根据类路径选择哪个 beans/configurations(类似于 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 发挥它的魔力