Heis的Blog

          保持簡單,保持愚蠢
          隨筆 - 29, 文章 - 1, 評論 - 122, 引用 - 0
          數據加載中……

          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 閱讀(1626) 評論(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
          主站蜘蛛池模板: 舟曲县| 芮城县| 南陵县| 东方市| 三门县| 冷水江市| 双桥区| 平乡县| 黄龙县| 彭水| 托里县| 天柱县| 辉县市| 康保县| 赫章县| 浦东新区| 阿拉善左旗| 银川市| 随州市| 和平区| 叶城县| 侯马市| 南郑县| 天祝| 郎溪县| 盐边县| 新竹市| 肥东县| 连城县| 揭东县| 敦煌市| 凤翔县| 都兰县| 壤塘县| 綦江县| 句容市| 延寿县| 永靖县| 沁阳市| 永济市| 石柱|