Spring Data Custom Repository覆盖优先级未按文档所述工作

问题描述

我提供了一个example project here

代码段总结了问题:

interface FruitRepository : CoroutineCrudRepository<Fruit,Long>,FruitRepositoryCustomization

interface FruitRepositoryCustomization {
    suspend fun findById(id: Long): Fruit?
}

class FruitRepositoryCustomizationImpl() : FruitRepositoryCustomization {
    override suspend fun findById(id: Long): Fruit? = error("This will never happen,though it should")
}

interface TreeRepository : CoroutineCrudRepository<Tree,TreeRepositoryCustomization<Long>

interface TreeRepositoryCustomization<ID> {
    suspend fun findById(id: ID): Tree?
}
class TreeRepositoryCustomizationImpl : TreeRepositoryCustomization<Long> {
    override suspend fun findById(id: Long): Tree? = error("This will happen,as expected")
}

docs指出:

自定义实现的优先级高于基础实现 实施和存储库方面。此顺序使您可以覆盖 基本存储库和方面方法,并解决两个歧义 片段贡献相同的方法签名。

A test显示,仅当替代的参数类型通过泛型可用于自定义实现时,才会发生替代。没有泛型的匹配签名不会导致覆盖。

我不确定这是预期的行为还是错误/可以改善的问题。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)