为了调用一个方法,我使用带有 Lambda 表达式的 hashmap 来找出应该调用哪个方法来查找数据。问题是:如果我直接调用这个方法 - 缓存工作没有任何问题。但是,如果我从地图中获取此方法 - 不缓存所有内容。是否有可能修复它或 Spring Cache 不能用于这种情况?
@Component
@Scope("singleton")
@SuppressWarnings("SpringJavaAutowiringInspection")
public class RulesZ
{
// Lookup is marked as @FunctionalInterface
Map<String,Lookup> lookups;
@Autowired
LookupZMapper lookzMapper;
@PostConstruct
public void init()
{
lookups = new LinkedHashMap<String,Lookup>();
lookups.put("shortform",(String kur, String type,String typeAddition)-> getKurForm(kur,type,typeAddition));
}
@Cacheable(value="lookupKur")
public String getKurForm(String kur, String type, String typeAddition)
{
LookupZtExample ex = new LookupZExample();
ex.createCriteria()...;
List res = lookzMapper.selectByExample(ex);
...
return "found value";
}
这意味着:如果我直接调用方法 getKurForm - 它将被缓存,但如果我使用以下方法调用它:
RulesZ.getLookups().get("shortform").lookup("val1","DF","DS"));
比它会在数据库中搜索每个方法调用。