<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();
        }

    主站蜘蛛池模板: 免费无码午夜福利片| 亚洲人成色在线观看| 中文字幕看片在线a免费| 亚洲AV无码一区二三区| 香蕉视频在线观看免费| 四虎影视永久免费观看网址| 成人亚洲国产精品久久| 亚洲?V乱码久久精品蜜桃 | 999国内精品永久免费视频| 久久久久国色AV免费观看性色| 久久精品亚洲AV久久久无码| 一个人看的免费高清视频日本| 毛片A级毛片免费播放| 亚洲AV无码片一区二区三区| 国产成人免费手机在线观看视频| 日日摸日日碰夜夜爽亚洲| 久久激情亚洲精品无码?V| 免费在线看黄网站| 亚洲字幕在线观看| 女人18毛片特级一级免费视频| 亚洲精品国产福利片| 在人线av无码免费高潮喷水| 亚洲AV日韩AV无码污污网站| 在线播放亚洲第一字幕| 久久成人无码国产免费播放| 亚洲一区AV无码少妇电影| 免费一区二区三区四区五区| 免费无码又爽又刺激网站直播| 日韩亚洲Av人人夜夜澡人人爽 | 亚洲小说区图片区另类春色| 久久免费的精品国产V∧| 久久久久久a亚洲欧洲aⅴ| 免费观看国产网址你懂的| 亚洲精品色午夜无码专区日韩| 无码国产精品一区二区免费3p | 亚洲中文字幕在线无码一区二区| 在线观看成人免费| 水蜜桃视频在线观看免费播放高清| 亚洲高清偷拍一区二区三区| 免费一级毛片在线播放视频| 亚洲国产成人AV在线播放 |