<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    莊周夢蝶

    生活、程序、未來
       :: 首頁 ::  ::  :: 聚合  :: 管理

    org.springframework.core.styler包解讀

    Posted on 2007-04-06 15:18 dennis 閱讀(1131) 評論(0)  編輯  收藏 所屬分類: java源碼解讀
        這個包的說明是:Support for styling values as Strings, with ToStringCreator as central class.
    這個包簡單來說就是提供一個pretty-printing功能的輔助類,而ToStringCreator就是用于產生一個可以輸出經過美化的value信息的toString()方法。使用方法參照spring的Test可以看到是這樣:   
            int[] integers = new int[] { 01234 };
            String str 
    = new ToStringCreator(integers).toString();
            assertEquals(
    "[@" + ObjectUtils.getIdentityHexString(integers) + " array<Integer>[0, 1, 2, 3, 4]]", str);
    或者寫個簡單例子感受下:
    int [] a={1,2,3,4,5,6,7,8,9};
    System.out.println(
    new ToStringCreator(a).toString());
        
    輸出:
    [@18558d2 array<Integer>[123456789]]

        如果你接觸過ruby,你應該很熟悉Object.inpsect這個功能,這里通過ToStringCreator包裝的toString()方法也是產生類似的能夠清晰顯示對象內部結構信息的方法。spring應該是使用這些輔助類來報告清晰的錯誤信息或者提示信息。
        看看這個包的UML類圖:

        首先,你需要理解ToStringStyler和ValueStyle兩個接口,ToStringStyler定義了描述一個輸入的Value信息的基本模板方法:
    public interface ToStringStyler {

        
    /**
         * Style a <code>toString()</code>'ed object before its fields are styled.
         * 
    @param buffer the buffer to print to
         * 
    @param obj the object to style
         
    */
        
    void styleStart(StringBuffer buffer, Object obj);

        
    /**
         * Style a <code>toString()</code>'ed object after it's fields are styled.
         * 
    @param buffer the buffer to print to
         * 
    @param obj the object to style
         
    */
        
    void styleEnd(StringBuffer buffer, Object obj);

        
    /**
         * Style a field value as a string.
         * 
    @param buffer the buffer to print to
         * 
    @param fieldName the he name of the field
         * 
    @param value the field value
         
    */
        
    void styleField(StringBuffer buffer, String fieldName, Object value);

        
    /**
         * Style the given value.
         * 
    @param buffer the buffer to print to
         * 
    @param value the field value
         
    */
        
    void styleValue(StringBuffer buffer, Object value);

        
    /**
         * Style the field separator.
         * 
    @param buffer buffer to print to
         
    */
        
    void styleFieldSeparator(StringBuffer buffer);

    }
        這是典型的Template Method模式,而兩個接口ToStringStyler、ValueStyler和它們的相應實現DefaultToStringStyler、DefaultValueStyler又是策略模式(Strategy)的應用體現。ValueStyler和DefaultValueStyler之間不僅僅是策略模式,同時也是visitor模式,請看DefaultValueStyler中一系列重載的visit方法,這些visit方法訪問不同類型Value的內部結構并構造pretty格式的String返回,提供給ToStringStyler使用。
        ToStringCreator是ToStringStyler的客戶,它使用ToStringStyler調用產生優美格式打印,而ToStringStyler 其實又是使用ValueStyler是訪問每個不同類型的子元素并返回優美格式的String。實現的相當精巧和靈活:
       
    public ToStringCreator(Object obj, ToStringStyler styler) {
            Assert.notNull(obj, 
    "The object to be styled is required");
            
    this.object = obj;
            
    this.styler = (styler != null ? styler : DEFAULT_TO_STRING_STYLER);
    //開始        this.styler.styleStart(this.buffer, this.object);
        }

    public ToStringCreator append(String fieldName, byte value) {
            
    return append(fieldName, new Byte(value));
        }
       一系列不同類型的append方法
       
    public String toString() {
    //結束,并返回優美格式的String        this.styler.styleEnd(this.buffer, this.object);
            return this.buffer.toString();
        }

    主站蜘蛛池模板: 国产成人免费在线| 黄色毛片免费网站| 亚洲国产精品免费在线观看| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 国产美女无遮挡免费视频网站| 亚洲91精品麻豆国产系列在线| 久九九精品免费视频| 国产99在线|亚洲| 成年女人免费视频播放77777| 国产在线jyzzjyzz免费麻豆| 亚洲天天做日日做天天欢毛片| 污视频在线免费观看| 久久夜色精品国产噜噜噜亚洲AV| 久久久久久国产精品免费无码 | 大学生a级毛片免费观看| 亚洲一区二区三区无码国产| 无人影院手机版在线观看免费| 亚洲色大网站WWW永久网站| 日韩成人免费aa在线看| 日韩一级片免费观看| 亚洲M码 欧洲S码SSS222| 两个人www免费高清视频| 久久精品亚洲综合专区| 日韩国产免费一区二区三区| 亚洲国产精品无码中文lv| 亚洲精品国产福利一二区| 免费人成激情视频在线观看冫| 久久精品国产亚洲av麻豆色欲 | 亚洲人成电影网站免费| 小说专区亚洲春色校园| 亚洲人成网77777色在线播放| 最近中文字幕完整免费视频ww| 亚洲日韩AV无码一区二区三区人| 国产成人免费a在线资源| 成人片黄网站色大片免费观看APP| 亚洲国产综合精品中文第一区| 午夜电影免费观看| 中国国语毛片免费观看视频| 亚洲一级毛片免费在线观看| vvvv99日韩精品亚洲| 91久久精品国产免费直播|