alibaba / jetcache

JetCache is a Java cache framework.
Apache License 2.0
4.96k stars 1.03k forks source link

注解类型支持 #895

Open Fixfly-SS opened 3 weeks ago

Fixfly-SS commented 3 weeks ago

以json序列化方式举例 如果使用注解的方式的时候, 可以注解里定义 序列化的class,或者根据方法返回类型确定要序列化的类型, 这样序列化的时候,就可以不写入类信息, 反序列化的时候也可以确定类型

areyouok commented 3 weeks ago

类里面嵌套的对象类型怎么指定呢?

Fixfly-SS commented 2 weeks ago

类里面嵌套的对象类型怎么指定呢?

对象里嵌套对象的类型 不需要指定, json 序列化和反序列化 都不需要指定内层嵌套对象的类型, 比如 AA.class 里 有BB.class 类型的嵌套对象, 序列化和反序列化工具都可以自动处理, 通过AA.class 反射也可以拿到BB.class

当然 如果缓存的第一层对象是List 这种类型 , 可能确实要指定两个类型 List.class 和 AA.class 再内层就不需要指定了

areyouok commented 2 weeks ago

没那么简单,都不用List,Object类型字段就搞不定,实际可以是类A,也可以是类B

Fixfly-SS commented 1 week ago

没那么简单,都不用List,Object类型字段就搞不定,实际可以是类A,也可以是类B

一般嵌套对象,类型不确定的情况相对少一些,或者针对这种无法简单反序列化的情况,注解里可以注入自定义反序列化的class, 就是框架 只提供相对简单类型的处理方案, 如果缓存的对象 过于复杂, 可以自己指定反序列化处理器,自己处理,不知道这样是否可行, 毕竟写入类信息这种方式, 一单重命名一下 就失效了, 甚至引发错误

areyouok commented 1 week ago

你这样也解决不了所有的问题,默认内置的话一定会有无数人来问,说怎么有这么大坑的,我不干这事。

但你可以自己搞,反序列化器可以自己扩展的。定义SpringConfigProvider的时候,注入自己的encoderParser,你自己定义个DefaultEncoderParser,把parseDecoder覆盖一下就好了(你需要传参数给它,所以DefaultSpringEncoderParser也解决不了你的问题)。最后大概写这样:

@Cached(... serialPolicy = "myjson?class=com.xxx.MyClass")