当使用@Cacheable时弹簧调用get(Object o,Class <t> aClass)函数

时间:2019-05-09 01:48:58

标签: java spring caching

我在springboot中使用@Cacheable并实现Cache接口覆盖以下功能:

 public String getName()
 public Object getNativeCache()
 public ValueWrapper get(Object key)
 public void put(Object key, Object value)
 public ValueWrapper putIfAbsent(Object key, Object value)
 public void evict(Object key)
 public void clear()

但是我让其他两个函数返回null

public <T> T get(Object o, Class<T> aClass)
public <T> T get(Object o, Callable<T> callable)

现在@Cacheable可以正常工作,但是当spring将调用这两个函数时,可以让它们返回null吗?

2 个答案:

答案 0 :(得分:1)

是的,这是一个问题。您无法实现该接口。这违反了https://en.wikipedia.org/wiki/Liskov_substitution_principle(“ SOLID”中的“ L”)。

它为后续开发提出了一个陷阱,其中接口的使用者必须知道在底层实现上要避免的事情。

简而言之,您没有达到界面约定。

答案 1 :(得分:0)

我不知道我的答案是否正确,但是如果您这样做,它将会起作用。 创建CacheConfig.java

  @Configuration
  @EnableCaching
  public class CacheConfig {

  @Bean
  public CacheManager cacheManager() {
    SimpleCacheManager cacheManager = new SimpleCacheManager();
    cacheManager.setCaches(Arrays.asList(new 
    ConcurrentMapCache(Constants.CATEGORYCACHE));
    return cacheManager;
  }

之后,您可以在ServiceImpl.class

中使用此方法级别的注释
  @Cacheable(value=Constants.CATEGORYCACHE)
  public List<Category> getCategoryList(Category category) {
    return categoryDAO.getCategoryList(category);
  }

 @CacheEvict(value=Constants.CATEGORYCACHE,allEntries=true)
 public void deleteCategory(Category category) {
    categoryDAO.deleteCategory(category);
 }

在这里查看SpringBoot官方文档:     https://howtodoinjava.com/spring-boot2/spring-boot-cache-example/ enter link description here