我在使用 @Cacheable 和使用基于 Spring 表达式语言的自定义键时遇到问题。我有以下代码
@Cacheable(value = "myCache", key = "#providerDTO.identifier")
ClientVO loadClientVOByProviderDTO(ProviderDTO providerDTO);
这是抛出以下错误
org.springframework.expression.spel.SpelEvaluation Exception: EL1007Epos 0): Field or property 'identifier' cannot be found on null
providerDTO 参数不为空,我已经验证过很多次了。文档说这应该可行,所以我很困惑。文档给出了以下示例
@Cacheable(value="books", key="#isbn.rawNumber")
我也尝试过使用静态方法。这会引发 NullPointerException,因为 providerDTO 在这里为空。
public static String cacheKey(ProviderDTO providerDTO)
{
return providerDTO.identifier + "-" + providerDTO.clientID + "-" + providerDTO.clubID;
}
我如何调试它以找出发生了什么?这是 Spring 3.2.4-RELEASE。@Cacheable 标签在一个接口上,但我使用的是标准的 spring AOP 而不是 AspectJ,据我所知,这应该仍然可以正常工作。