gpt4 book ai didi

java - 我可以仅在 Spring 4 中重写给定类的 @Cacheable KeyGenerator 吗?

转载 作者:行者123 更新时间:2023-12-01 11:04:09 25 4
gpt4 key购买 nike

我正在尝试覆盖整个类的 KeyGenerator,但不知道是否有一种简单的方法可以做到这一点。

我有以下配置 bean 设置来启用我的缓存:

@Configuration
@EnableCaching(mode=AdviceMode.ASPECTJ)
public class CacheConfig extends CachingConfigurerSupport{
@Bean(destroyMethod="shutdown")
public net.sf.ehcache.CacheManager ehCacheManager() {
CacheConfiguration configCache = new CacheConfiguration();
veracodeCache.setName("repo");
net.sf.ehcache.config.Configuration config = new net.sf.ehcache.config.Configuration();
config.addCache(configCache);
return net.sf.ehcache.CacheManager.newInstance(config);
}

@Bean
@Override
public CacheManager cacheManager() {
return new EhCacheCacheManager(ehCacheManager());
}

@Bean
@Override
public KeyGenerator keyGenerator() {
return new SimpleKeyGenerator();
}
}

但是,在特定的类中,我想使用不同的 key 生成器。我知道我可以在每个 @Cacheable 调用中重写单个 keyGenerator,但无法找到一种方法来为整个类重写它。

例如:

@KeyGenerator("com.domain.MyCustomKeyGenerator")  // <--- anyway to set a different key gen for the entire class?
public class Repo{

@Cacheable("repo")
public String getName(int id){
return "" + id;
}
}

根据文档,如果我在类型上设置@Cacheable,所有方法都将被缓存(这不是我想要的)。

当然,我的另一个选择是在每个方法上指定@Cacheable(value="repo", keyGenerator="com.domain.MyCustomKeyGenerator"),但这非常多余,特别是如果我想更改多个类的默认 key 生成器。

有支持吗?

最佳答案

您可以在类级别使用@CacheConfig。它不会启用方法的缓存,而只是对其进行配置。

@CacheConfig(keyGenerator="com.domain.MyCustomKeyGenerator") 
public class Repo{

// your com.domain.MyCustomKeyGenerator will be used here
@Cacheable("repo")
public String getName(int id){
return "" + id;
}
}

关于java - 我可以仅在 Spring 4 中重写给定类的 @Cacheable KeyGenerator 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33115625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com