Spring 使用@CacheResult时对参数调用静态方法

Spring 使用@CacheResult时对参数调用静态方法,spring,caching,ehcache,jcache,jsr107,Spring,Caching,Ehcache,Jcache,Jsr107,我需要缓存调用Web服务的方法的结果。 方法签名如下所示: public Result search(long id, String name, Date date); 结果取决于所有参数 我为缓存myCache创建了ehcache配置,通常要使用此缓存,我应该使用@CacheResult注释: @CacheResult(cacheName = "myCache") public Result search(long id, String name, Date date); @Cacheab

我需要缓存调用Web服务的方法的结果。 方法签名如下所示:

public Result search(long id, String name, Date date);
结果取决于所有参数

我为缓存
myCache
创建了ehcache配置,通常要使用此缓存,我应该使用
@CacheResult
注释:

@CacheResult(cacheName = "myCache")
public Result search(long id, String name, Date date);
@Cacheable(value = "myCache", key ="{#id, #name, T(my.static).method(#date)}")
public Result search(long id, String name, Date date);
但是在我的例子中,我需要对
date
参数调用一个静态方法,我希望使用与
@Cacheable
注释相同的方法:

@CacheResult(cacheName = "myCache")
public Result search(long id, String name, Date date);
@Cacheable(value = "myCache", key ="{#id, #name, T(my.static).method(#date)}")
public Result search(long id, String name, Date date);

我的问题是,在使用
@CacheResult
时,如何对参数调用静态方法?

@CacheResult
提供了一种通过定义密钥生成器类自定义生成密钥的方法,如下所示:

@CacheResult(cacheKeyGenerator = CustomKeyGenerator.class)
public Result search(long id, String name, Date date); 
它不支持直接在注释中根据SpEL评估定义密钥生成;相反,您必须提供自己的
javax.cache.annotation.CacheKeyGenerator实现:

public class CustomKeyGenerator implements CacheKeyGenerator {

    @Override
    public GeneratedCacheKey generateCacheKey(CacheKeyInvocationContext<? extends Annotation> cacheKeyInvocationContext) {
        CacheInvocationParameter[] parameters = cacheKeyInvocationContext.getKeyParameters();
        // calculate a key based on parameters
        return new SearchKey();
    }
公共类CustomKeyGenerator实现CacheKeyGenerator{
@凌驾
公共生成的CacheKey generateCacheKey(CacheKeyInvocationContext