ReflectionToStringBuilder的使用分析与优化

来源:互联网 发布:重庆seo博客 编辑:程序博客网 时间:2024/06/08 04:40

前因:Object 类 手写toString 方法 太繁琐, 修改太麻烦

后果:利用 Apache Commons lang 自动化实现 toString

优势:①代码简洁 , 无须任何配置

   ② Model 属性变化 , 无需修改 toString

缺陷:安全性问题 , 反射私有属性值也会暴露 .

改进:利用ToStringBuilder弥补(通过 ReflectionToStringBuilder 子类 , 覆盖其 accept 方法来加以筛选 )

示例代码如下:

public String toString() {

return (new ReflectionToStringBuilder(this) {

protected boolean accept(Field f) {

return super.accept(f) && !f.getName().equals(“password”);

}

}).toString();

}

 

代码解释: toString 方法会跳过名为 password 属性

 

ToStringStyle 抽象类与设计模式

ToStringBuilder 封装 的三个属性 :

/**

* Current toString buffer, not null.

*/

private final StringBuffer buffer;//封装最终结果

/**

* The object being output, may be null.

*/

private final Object object;//toString 对象

/**

* The style of output to use, not null.

*/

private final ToStringStyle style;

 

关于类型ToStringStyle 在 ToStringBuilder 源码中的利用 ,

ToStringBuilder 类中所有的方法 append 都是通过调用属性 style 相应方法实现 .

ToStringStyle 设计模式 : 单例模式的衍生,返回子类对象

本文小结 :

①ToStringBuilder分而治之, 通过属性 ToStringBuilder 来分离功能的调用与实现 .          ②子类达到多态的单例少见,  通过子类 StandardToStringStyle 提供了一个更为灵活的扩展 .

③具体实现大家可以参考 ReflectionToStringBuilder 源码 .

0 0
原创粉丝点击