1、返回值为Map<T, K> 的方法增加@Cacheable后,T和K被类型擦出了,为啥?
redisson结合Spring使用时,会有RedissonSpringCacheManager,将redissonClient自动注入,另外还有codec的概念,即序列化和反序列化,可以查看实现类,就几种实现,假设我们使用org.redisson.codec.JsonJacksonCodec,可以看到,decode中,仅一个Object.class,即范型信息并未带入,故出现了问题
2、对于匿名内部类的滥用导致反序列化失败
你会想,匿名内部类有什么影响?
那么跟着我看下我们时常会写的一种Map写法:
Map<String, Object> map = new HashMap(){{put("mykey", "test");}};
这种方式有什么问题呢,这就涉及到匿名内部类声明方式在实际编译时是如何存在于class文件中的
...
$1 extends HashMap{
...
}
...
也就是新生成了一个匿名类型,而这个类型在反序列化时是没办法找到构造函数的,故而是有问题的。
按上面写法后,序列化时,存储的是xxx$1这个匿名类型,所以反序列化也就失败了。