hprose for java源码分析-10 序列化自定义类 字段访问模式

字段访问模式

上回中提到writer.mode,这是字段访问模式标识,可能取值定义为

FieldMode 字段模式

PropertyMode 属性模式

MemberMode 成员模式

模式是选取类成员变量的一种规则。成员选择由Accessors类来完成。

1. FieldMode

getFields()方法实现FieldMode规则。

选取规则:遍历type及type的祖先类,对于类层次中的每个类,调getDeclaredFields()方法,选择所有成员变量,但需要排除掉静态成员变量以及用transient修饰的变量。

如:

按照FieldMode的规则,只能选取到f1, f2, f4。

2. PropertyMode

getProperties()方法实现PropertyMode 规则。

95-108行,找到以 set打头的方法,这个方法不能是静态的,不能有返回值,且只能有一个参数。

109-110行,找到满足条件的方法后,截取方法名,即将set去掉,得到一个属性名,再由属性名,调

findGetter(Method[] methods, String name, Class

paramType),得到这个属性的get方法。

最终由属性的get, set方法组成属性访问器。

如:

按照PropertyMode 规则,会找到setF1方法,去掉方法名中的set,则剩下F1,再调

findGetter,找到 getF1(), 或isF1()这样的方法。

setF2因有返回值被排除掉,setF3因是静态的被排除掉,setF4因没有参数被排除掉。

3. MemberMode

getMembers ()方法实现MemberMode 规则。

182-198行,找到以set,get方法修饰的变量,这段与PropertyMode 模式类似

207-214行,找到类clazz的所有的public成员变量,包括其祖先类的。

如:

按照MemberMode 规则,会找到f1, f3这2个变量,而f2由于不是public变量,又没有set,get方法,因此不会选择到。

以上3种模式,定义了成员变量的选择规则,这在序列化时会用到。因为序列化时,总有需求说,哪些字段需要序列化,哪些不需要序列化。可以根据实际需要,从中选择不同的模式。

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();