0

为了调用一个方法,我使用带有 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"));

比它会在数据库中搜索每个方法调用。

4

0 回答 0