閑人野居
          好好學(xué)習(xí),天天向上
          posts - 57,  comments - 137,  trackbacks - 0

          ??????? 這幾天,閑著無事,看起了spring的源碼,順便也學(xué)習(xí)一下,人家的設(shè)計(jì)理念。
          ??????? spring的源碼還是比較多的,但是區(qū)分的層次比較可以。對比了一下自己設(shè)計(jì)的程序,有點(diǎn)慚愧,每次分包的時(shí)候,設(shè)計(jì)的都比較爛。
          ??????? 閑話少說,先來看看spring 的核心包beans。
          ??????? beans 包主要提供了接口和類用于處理java beans。
          ??????? 其中最主要的接口是BeanWrapper
          ??????? Spring 的中心接口,用于訪問javabeans 的低層操作。默認(rèn)實(shí)現(xiàn)為BeanWrapperImpl 提供分析和處理標(biāo)準(zhǔn)java beans 用于get set 屬性,取得屬性描述,查詢屬性的讀/寫能力。
          ????用法非常簡單
          ??? TestBean tb = new TestBean();
          ????BeanWrapper bw = new BeanWrapperImpl(tb);
          ??? bw.isReadableProperty("age");//判斷age屬性是否可讀
          ??? bw.setPropertyValue("name", "tom"); //設(shè)置name屬性的值為tom
          ??? bw.getPropertyValue("int2")//取得屬性
          ??? //當(dāng)然,最強(qiáng)大的是能嵌套設(shè)置屬性,如:
          ??? //tb中有個(gè)spouse的屬性,也為TestBean,這樣
          ?? ?bw.setPropertyValue("spouse.name", "tom");?
          ????//等價(jià)于tb.getSpouse().setName("tom");
          ??? //bw 同樣支持?jǐn)?shù)組和集合,map屬性設(shè)置
          ??? bw.getPropertyValue("array[0].name");
          ??? bw.getPropertyValue("map[key4][0].name");
          ????
          ????beans包 還提供了一個(gè)PropertyValues用于保存多個(gè)屬性值,默認(rèn)的實(shí)現(xiàn)MutablePropertyValues
          ??? MutablePropertyValues pvs = new MutablePropertyValues();
          ??? pvs.addPropertyValue("array[0].name", "name5");
          ??? pvs.addPropertyValue("array[1].name", "name4");
          ??? bw.setPropertyValues(pvs);
          ???
          ??? BeanWrapper的層次結(jié)構(gòu),也比較簡單繼承于ConfigurablePropertyAccessor ,而ConfigurablePropertyAccessor 又繼承于PropertyAccessor 和?? PropertyEditorRegistry 接口。
          ??????? 有一點(diǎn)不太明白,為什么ConfigurablePropertyAccessor 要繼承于PropertyEditorRegistry?
          ??????? PropertyEditorRegistry 的主要作用是提供方法用于注冊JavaBeans PropertyEditors。默認(rèn)的實(shí)現(xiàn)為? PropertyEditorRegistrySupport
          ??????? 這就使得BeanWrapperImpl 也需要繼承PropertyEditorRegistrySupport,從字面意義上來說,兩個(gè)類不是很有關(guān)系,其實(shí)最主要用到的方法,也就是registerDefaultEditors(),注冊spring中所有的屬性編輯類。
          ??????? beans 包中還有兩個(gè)接口TypeConverter和Mergeable 。TypeConverter由BeanWrapperImpl實(shí)現(xiàn),主要用于轉(zhuǎn)換屬性值。其主要的工作由TypeConverterDelegate 這個(gè)包內(nèi)類完成的。Mergeable 主要是用來合并值得,不過具體的實(shí)現(xiàn),在org.springframework.beans.factory.support 包中。
          ??????? beans 包中提供了兩個(gè)有用的工具類,BeanUtils和PropertyAccessorUtils。

          posted on 2006-09-02 10:10 布衣郎 閱讀(1207) 評論(0)  編輯  收藏 所屬分類: spring

          <2006年9月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567

          常用鏈接

          留言簿(12)

          隨筆分類(59)

          隨筆檔案(57)

          blog

          java

          uml

          搜索

          •  

          積分與排名

          • 積分 - 358033
          • 排名 - 156

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 阿荣旗| 汝城县| 夏邑县| 疏附县| 仪征市| 海淀区| 日照市| 花莲县| 诸暨市| 张北县| 调兵山市| 资溪县| 贵港市| 偃师市| 邵阳县| 云霄县| 平陆县| 萨嘎县| 剑阁县| 建阳市| 彭阳县| 随州市| 丹东市| 河间市| 鄂州市| 曲沃县| 江川县| 绥滨县| 丹寨县| 新巴尔虎左旗| 扎鲁特旗| 永福县| 榆社县| 湖口县| 合江县| 龙山县| 璧山县| 保康县| 谷城县| 中方县| 石城县|