我正在创建一个基于spring-data构建的库,以便能够动态生成Spring Data存储库。我希望创建一个这个过程的通用包装器,它运行在Spring Data抽象上。
这种方式取决于添加到类路径示例的依赖项:spring-data-jpa
或spring-data-mongodb
我将能够生成存储库并将它们注入到我的spring上下文中。
我无法找到有关如何执行此操作的良好文档。有什么想法吗?
答案 0 :(得分:3)
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做到这一点