如何解决如何实现像仓库这样的Spring Data
我有以下界面(在kotlin中):
interface QueryRepository<T> {
fun findExpenses(filter: IFilter): Flux<T>
}
为了像弹簧数据一样仅使用接口,我想到了这个。首先,我创建一个扩展它的新接口,并提供类型(java):
public interface ExpenseQueryRepository extends QueryRepository<Expense> {
}
然后提供实现(java):
public class ExpenseQueryRepositoryImpl implements ExpenseQueryRepository {
private final FilterFactory<Query> filterFactory;
private final ReactiveMongoTemplate template;
@Autowired
public ExpenseQueryRepositoryImpl(FilterFactory<Query> filterFactory,ReactiveMongoTemplate template) {
this.filterFactory = filterFactory;
this.template = template;
}
@Override
public Flux<Expense> findExpenses(IFilter filter) {
var documentFilter = filterFactory.transformFilters(filter,Expense.class);
return template.find(documentFilter,Expense.class);
}
}
现在我可以用我的实现和spring数据的实现创建一个接口:
public interface ExpenseRepository extends ReactiveMongoRepository<Expense,String>,ExpenseQueryRepository {
}
这有效。但是,在ExpenseQueryRepository中,代码可以重复使用,只需要一个不同的类即可。我不能仅通过类型定义获得它。 Kotlin的reified类型不是这里的选项-否则我无法正确使用它。 所以我的问题是,有没有一种方法可以以一种通用的方式提供实现,而最终只能定义:
public interface ExpenseRepository extends ReactiveMongoRepository<Expense,QueryRepository<Expense> { }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。