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

    主站蜘蛛池模板: 国产亚洲精久久久久久无码| 亚洲不卡视频在线观看| 暖暖免费日本在线中文| 亚洲精品国产福利片| 免费看香港一级毛片| 国产99视频精品免费视频76| 亚洲人成在线播放网站岛国| 好爽…又高潮了免费毛片| 国产高清视频免费在线观看 | 亚洲人成网网址在线看| jjzz亚洲亚洲女人| 最近2019免费中文字幕视频三| 亚洲av成人一区二区三区观看在线 | 麻花传媒剧在线mv免费观看| 国产成人亚洲精品无码AV大片| 国产亚洲av片在线观看播放| 午夜高清免费在线观看| 曰批全过程免费视频在线观看无码| 国产成人精品亚洲日本在线| 亚洲精品中文字幕无码蜜桃| 在线免费观看一级片| 久久午夜羞羞影院免费观看| 色视频在线观看免费| 亚洲冬月枫中文字幕在线看| 亚洲一区AV无码少妇电影☆| 成全视频在线观看免费高清动漫视频下载 | 亚洲精品免费网站| 亚洲国产美国国产综合一区二区| 国产精品免费电影| 国产乱子精品免费视观看片| 两个人www免费高清视频| 亚洲日韩久久综合中文字幕| 亚洲精品白色在线发布| 亚洲啪啪综合AV一区| 可以免费观看的一级毛片| 特级做A爰片毛片免费69| 日韩在线永久免费播放| 一级美国片免费看| 免费观看又污又黄在线观看| 亚洲乱码无人区卡1卡2卡3| 亚洲精品高清国产麻豆专区|