我猜定制器是作为双 lambda 事物的权衡而引入的?如果是这样,我认为我们没有在讨论的问题上取得进展。
不。我添加它是因为来自https://github.com/spring-projects/spring-boot/pull/28498#issuecomment-1011872504的评论。双 lambda 仅出现在 Spring boot 测试代码中,而不出现在普通用户代码中。这里是评论:
IMO 这又回到了默认的 lambda 问题。我认为获得一个应用默认值的默认回调并让您进一步自定义它会更好,而不是要求实现该接口。
如果用户只想提供默认值,那么定制器对我来说似乎是更好且易于理解的界面。你还写道:
您与供应商开始的内容应该保持一种或另一种形式,这比我们引入定制器要好得多。拥有一个应用默认值并采用定制器的默认实现应该就足够了。
最好有一些代码。这里有一个比较。使用定制器:
@Bean
SpringCache2kDefaultCustomizer cache2kDefaultCustomizer() {
return (builder) -> builder.entryCapacity(4711);
}
如果我理解正确的话,这里包装了定制器或一些消费者:
@Bean
SpringCache2kDefaultSupplier cache2kDefaults() {
return SpringCache2kDefaultSupplier.of((builder) -> builder.entryCapacity(4711));
}
提供默认值感觉相当难看。但也许你心里有一个我不知道的 Spring 技巧?
注意:这里复杂的因素之一是原生的空支持,这让我难以置信。其他缓存没有这个问题,只需提供完整的缓存配置即可,不需要 Spring 特定的默认值。
我们现在有三种方式来定制东西,配置默认值的“默认供应商”,定制默认值的“默认定制器”,以及配置缓存管理器的定制器。我认为供应商和定制商没有必要,因为供应商的目的就是提供默认值。
默认供应商仍然可以提供要使用的管理器。或者,aManagerSupplier
会更清楚,或者,我们再次使用该属性,或者,我们简单地忽略它,因为它总是可以在没有自动配置的情况下创建缓存管理器。
配置缓存名称时,Caffeine 有 4 种提供默认值的可能性:在属性中,提供构建器 (Caffeine),提供 CaffeineSpec,然后您可以使用CacheManagerCustomizer
并通过构建器、spec 或 String 再次设置默认值。因此,根据我一开始的想法或要求,它应该与人们从其他缓存中了解到的类似,它会自动导致许多不同的概念来提供选项。
所以,是的,最好少一些不同的概念。目前我倾向于放弃供应商但保留定制器,因为这会更频繁地使用并且是一个已知的 Spring boot 概念。也许将其简单地重命名为Cache2kDefaults
?
对于更专业的东西,他们CacheManager
总是可以直接提供。跳过自动配置并提供CacheManager
bean 有什么特别的缺点吗?
由于事情有点失控,我觉得我们都已经有点沮丧了,我觉得写下目标和可能的设置场景以进行更有条理的讨论是有意义的。你怎么认为?