Heis的Blog

          保持簡單,保持愚蠢
          隨筆 - 29, 文章 - 1, 評論 - 122, 引用 - 0

          導航

          <2009年11月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          公告


          常用鏈接

          留言簿(11)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          Blog

          搜索

          •  

          積分與排名

          • 積分 - 132099
          • 排名 - 468

          最新評論

          閱讀排行榜

          評論排行榜

          Jakarta Commons Cookbook讀書筆記--Commons BeanUtils

          Jakarta Commons Cookbook讀書筆記系列

          2 Apache Commons BeanUtils 1.7

          功能說明:顧名思義,Bean Utility就是Bean小工具,主要是封裝了反射(reflection)和自省(introspection)的API(可以查看java.lang.reflect和java.beans文檔),對bean進行操作。
          主要功能:操作Bean的屬性,針對Bean屬性排序,Bean和Map的轉換,創建動態的Bean等
           
          2.1 org.apache.commons.beanutils.PropertyUtils 利用反射操作bean的屬性

          getSimpleProperty()通過反射讀取屬性
          Person person=new Person();
          person.setName
          =("heis");
          String name
          =(String)PropertyUtils.getSimpleProperty(person,"name");->heis

          getNestedProperty()檢索嵌套的bean屬性
          Book book=new Book();
          book.setAuthor(person);
          String authorName
          =(String)PropertyUtils.getNestedProperty(book,"author.name");//得到person的name

          getIndexedProperty()訪問數組或List型內Object的屬性
          Chapter chapter1=new Chapter();
          Chapter chapter2
          =new Chapter();
          book.getChapters().add(chapter1);
          book.getChapters().add(chapter2);
          Chapter chapter
          =(Chapter)PropertyUtils.getIndexedProperty(book,"chapter[0]");

          getMappedProperty()訪問Map型bean屬性的值
          Person person=new Person();
          person.setName
          =("heis");
          Map favorites
          =new HashMap();
          favorites.put(
          "food","rice");
          person.setFavorite(favorites);
          String favorFood
          =(String)PropertyUtils.getMappedProperty(person,"favorites(food)");->rice

          getProperty()和setProperty()可以訪問任何bean屬性,通過表達式可以完成上面方法的功能
          這是一個樹型的Bean屬性視圖
          Book book
          |--List authors
                
          |--[0]->Person person
                              
          |--Map favorites
                                       
          |--Entry(key->"food",value->"")
          PropertyUtils.setProperty(book,
          "authors[0].favorites(food)","rice");
          String favorFood
          =(String)PropertyUtils.getProperty(book,"authors[0].favorites(food)");->rice

          isReadable()和isWritable()檢查bean是否可讀(有getter)或可寫(有setter)
          PropertyUtils.isReadable(book,"name");
          PropertyUtils.isWritable(book,
          "name");

          getPropertyType()獲取屬性類型
          System.out.println(PropertyUtils.getPropertyType(person,"favorites"));->java.util.Map

          copyProperty()復制Bean屬性,只復制引用,final類型和原始類型(primitive type)
          Book book1=new Book();
          book1.setName(
          "Commons Cookbook Notes");
          Book book2
          =new Book();
          PropertyUtils.copyProperty(book2,book1);
          //將book1的name屬性copy到book2

          describe()創建包含Bean屬性的Map
          Person person=new Person();
          person.setName(
          "heis");
          Book book
          =new Book();
          book.setName(
          "Commons Cookbook Notes");
          book.setAuthor(person);
          Map propMap
          =PropertyUtils.describe(book);
          propMap.get(
          "name");->Commons Cookbook Notes
          propMap.get(
          "author");->person

          Jakarta Commons Cookbook讀書筆記系列



          程序員的一生其實可短暫了,這電腦一開一關,一天過去了,嚎;電腦一開不關,那就成服務器了,嚎……

          posted on 2009-11-21 17:44 Heis 閱讀(1629) 評論(3)  編輯  收藏 所屬分類: Jakarta Commons Cookbook讀書筆記

          評論

          # re: Jakarta Commons Cookbook讀書筆記--Commons BeanUtils  回復  更多評論   

          功能很強大,只是不經常用,收了呵呵
          2009-11-22 21:07 | bobby

          # re: Jakarta Commons Cookbook讀書筆記--Commons BeanUtils  回復  更多評論   

          性能應該大大不如直接通過bean自己的get set方法得到屬性值吧?
          2009-11-23 13:46 | 大衛

          # re: Jakarta Commons Cookbook讀書筆記--Commons BeanUtils  回復  更多評論   

          @大衛
          雖然jdk5以后反射性能有了很大的提升,但是反射性能肯定會差一點。通常情況下,如果可以通過getter和setter訪問,盡量使用getter和setter,這樣重構起來也簡單。
          2009-11-23 19:09 | Heis
          主站蜘蛛池模板: 泸水县| 麻城市| 德格县| 长宁县| 鹤山市| 城口县| 房山区| 四川省| 洛隆县| 富源县| 康马县| 曲靖市| 盈江县| 中山市| 柳江县| 肇庆市| 乳山市| 连江县| 通河县| 青铜峡市| 临城县| 两当县| 南投市| 仁怀市| 东阳市| 石景山区| 鲁甸县| 阳新县| 娱乐| 祁阳县| 中阳县| 东光县| 吴川市| 图木舒克市| 即墨市| 兴业县| 湾仔区| 辽阳市| 中牟县| 宁明县| 榕江县|