我想使用自定义WrappingCacheManager
作为caffeineCacheManager
的装饰器。
当前配置是使用caffeine.newBuilder()...
强制创建的,我想使用以下属性将其替换为声明性版本:
spring.cache.caffeine.spec=maximumSize=500,expireAfterWrite=60s
不幸的是,在应用程序上下文中没有caffeineCacheManager
类型的bean,因此无法自然注入和包装。
意图:
// now it fails with NoSuchBeanDefinitionException
@Configuration
class CacheConfig1 {
@Bean
CacheManager cacheManager(caffeineCacheManager caffeineCacheManager) {
return new WrappingCacheManager(caffeineCacheManager);
}
}
当前使用的变体:
@Configuration
class CacheConfig2 {
@Bean
CacheManager cacheManager() {
var cfg = caffeine.newBuilder().expireAfterWrite(60,TimeUnit.SECONDS).maximumSize(500);
caffeineCacheManager caffeineCacheManager = new caffeineCacheManager();
caffeineCacheManager.setcaffeine(cfg);
return new WrappingCacheManager(caffeineCacheManager);
}
}
pom.xml
中的依赖项片段<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.7.RELEASE</version>
</parent>
...
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
</dependency>
如何将caffeineCacheManager
注入到bean创建方法中,并能够围绕它创建包装器CacheManager
?