亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

struts源代碼閱讀(Commons-Beanutils包)

2019-11-18 12:54:36
字體:
來源:轉載
供稿:網友

  Commons-Beanutils(一)
  
  Commons-Beanutils 這個是jakarta commons項目中的一個子項目。這個項目開發的目的是幫助開發者動態的獲取/設值java Bean的屬性,同時解決每次都要寫getXXX和setXXX的麻煩。
  
  一、XXXConvert
  
  這些類都實現Converter接口,提供把value值轉化成為相應XXX類的實現?,F在只針對四種類型:數字,時間,Boolean和String。在Converter 接口中只有一個方法convert(Class type, Object value),把value對象轉換為type所要求的類。XXXConvert類中這個方法的思路是:
  
  1、假如value==null,并且自己內部有缺省的值那么就返回這個缺省的值。假如沒有缺省值,就拋出ConversionException異常。
  
  2、假如value instanceOf XXX類,那么就直接返回value。
  
  3、假如上面的都不行,那么調用new XXX(value.toString())或者XXX.valueOf(value.toString())方法來返回。轉化失敗時,拋出ConversionException異常。
  
  二、非凡的實現
  
  1、對于ClassConverter類,當進入第三種情形的時候,實際執行的是
  
  ClassLoader classLoader =Thread.currentThread().getContextClassLoader();  if (classLoader == null) {    classLoader = ClassConverter.class.getClassLoader();  }  return (classLoader.loadClass(value.toString()));
  
  2、對于BooleanConverter類,當進入第三種情形的時候,實際執行的是,根據value.toString()的值:yes,y,true, on, 1 返回true;no,n,false,off,0 返回false。假如這些情形都不符合,并且有缺省值的時候則返回缺省值。否則拋出ConversionException;
  
  三、XXXArrayConverter
  
  這些類繼續自AbstractArrayConverter類。 AbstractArrayConverter 實際只實現了一個List parseElements(String svalue)方法。這個方法接受的是{value1, value2,...}格式的字符串,逐個解析出來后,放入一個ArrayList中。它通過StreamTokenizer解析字符串:StreamTokenizer是用來分離input stream中讀取的字符串,并且可以根據標記區分不同的內容,比如數字,字符或者注釋。XXXArrayConverter由于要轉換的是一個數組,所以convert(....)方法的實現過程有所不同。
  
  1、假如value==null,并且自己內部有缺省的值那么就返回這個缺省的值。假如沒有缺省值,就拋出ConversionException異常。
  
  2、假如model.getClass() == value.getClass(),那么就直接返回value。
  
  3、假如上面的都不行,那么就通過parseElements(value.toString())生成一個數組,再對數組的元素逐個調用new XXX(list.get(i))或者XXX.valueOf(list.get(i))方法,轉換成為數組對元素要求的類型。轉化失敗時,拋出ConversionException異常。
  
  Commons-Beanutils(二)
  
  一、LocaleConverter 與 BaseLocaleConverter
  
  LocaleConverter繼續自 Converter接口,定義了一個新方法convert(Class type, Object value, String pattern)。
  
  抽象類BaseLocaleConverter實現了LocaleConverter接口。它的locPattern屬性用來表示這個對象的pattern是否是本地化的格式。patttern 是指把何種格式的時間或者數字值轉換成標準值。convert(...)的執行過程是:
  
  1、假如value==null,并且自己內部有缺省的值那么就返回這個缺省的值。假如沒有缺省值,就拋出ConversionException異常。
  
  2、根據參數pattern值是否為null,調用parse(Object value, String pattern)方法:假如這個參數不為null那么就使用這個參數的值,否則使用對象預存的pattern值。假如這
  
  樣做引起了異常,會首先判定是否能夠返回缺省的值,不能則拋出ConversionException異常。
  
  3、parse(Object value, String
  
  pattern)方法的實現被拋至繼續了它的類具體實現。這個方法雖然把value值表述為Object類型,但是最后都是通過強制轉換,轉換成為String類型。也就是說它實際上需要的
  
  是String類型的value。
  
  二、 XXXLocaleConverter
  
  把pattern格式的value轉換成標準格式的相應的XXX類。這些類可以分為兩大類:一類為時間,一類為數值。
  
  1、時間類最后都會通過SimpleDateFormat類對值進行轉換,程序如下:
  
  if(pattern == null) {       pattern = locPattern ? new SimpleDateFormat().toLocalizedPattern() :         new SimpleDateFormat().toPattern();  }  SimpleDateFormat format = new SimpleDateFormat(pattern, locale);  if (locPattern) {    formatter.applyLocalizedPattern(pattern);  }else {    formatter.applyPattern(pattern);  }  return formatter.parse((String) value);
  
  2、數值類最后都會通過DecimalFormat類對值進行轉換,程序如下:
  
  DecimalFormat formatter = (DecimalFormat) DecimalFormat.getInstance(locale);  if (pattern != null) {    if (locPattern) {      formatter.applyLocalizedPattern(pattern);    } else {      formatter.applyPattern(pattern);    }  }  return formatter.parse((String) value);
  
  這個轉化過程要注重精度的問題。由于Number類是所有的數值類的父類,所以轉換完成后要檢查最后的結果是否是當前要求的精度:假如大于所要求的精度,則拋出ConversionException異常。
  
  Commons-Beanutils(三)
  
  Dyna開頭的類,是專門為DynaFormBean而設計的。
  
  一、DynaBean,DynaClass 與 DynaPRoperty
  
  DynaBean并不是Java中所定義的Bean,而是一種“假”的Bean。因為它并不是通過getXXX和setXXX方法,對XXX屬性進行取值和設值的。它通過一個實現了DynaClass接口的類,幫助治理其所有的屬性的類別,而自己則治理對XXX屬性值的設定和獲取。在設值的時候會通過與name對應的DynaProperty對象,檢查賦值的類別是否正確。
  
  DynaProperty類描述的是DynaBean中所包含的屬性的類型。DynaProperty類有三個屬性:屬性的名稱:name,屬性的名稱;type,屬性的類別;contentType,假如DynaProperty描述的是個容器對象(List或者Map),那么這個contentType就代表這個容器內元素的類別。這個類值得關注的地方是writeObject和readObject方法的實現。它會首先判定自己的type是否是一個primitive的類,假如是,則先寫入true標志,再寫入對應的primitive類的編號;否則寫入false標志,再寫入type。因為在調用readObject方法時,假如得出的是primitive類型,則type的值為XXX.TYPE而不是XXX.class。
  
  DynaClass 是一個接口,用來治理DynaBean中所有的DynaProperty屬性。
  
  二、BasiceDyanBean 與 BasicDynaClass
  
  BasiceDyanBean 實現自DynaBean接口。它包含一個實現了DynaClass接口的類的對象,和一個用來存放值的HashMap。這個HashMap的key與DynaClass中HashMap的key是一一對應的。
  
  BasicDynaClass 實現了DynaClass接口,以DynaProperty的name為key保存所有這些DynaProperty對象。它通過newInstance方法動態生成實現了DynaBean接口的類的對象;注重這個類是可以動態指定的,假如沒有,那么就是默認的BasicDynaBean類。動態指定類是通過反射實現的,程序如下:
  
  //dynaBeanClass為任意的實現了DynaBean接口的類,constrUCtorTypes為這個
  
  //類的構造方法所需要的參數的類型
  
  constructor = dynaBeanClass.getConstructor(constructorTypes);
  
  //constructorValues為構造方法的參數值,實際上它的值為當前的BasicDynaClass
  
  return ((DynaBean) constructor.newInstance(constructorValues));
  
  Commons-Beanutils(四)
  
  一、ConvertUtils 和 ConvertUtilsBean
  
  ConvertUtils 是ConvertUtilsBean類的一個簡單封裝,即ConvertUtils中的所有方法都是通過直接調用ConvertUtilsBean中的同名方法實現的。假如你需要更復雜的功能,就使用ConvertUtilsBean,否則使用ConvertUtils。
  
  ConvertUtilsBean 通過一個HashMap治理所有的XXXConverter。這個HashMap的key為XXX的類全名,值為相應的XXXConverter對象。通過deregister()方法,初始化這個HashMap。這個初始化方法會為每一個XXXConverter類提供一個缺省的值。用戶可以動過setDefaultXXX(...)方法來自行設置XXXConverter對象的缺省值。這個類還提供了convert(...)方法,對String value進行相應的轉化。
  
  二、PropertyUtils 和 PropertyUtilsBean
  
  PropertyUtils 是PropertyUtilsBean類的一個簡單封裝,同樣它的所有方法都是通過直接調用PropertyUtilsBean 中同名方法實現的。
  
  PropertyUtilsBean 對DynaBean或者一個java標準Bean中的屬性動態的賦值和取值(非通過getXXX和setXXX方法)。
  
  1、這個類支持多層嵌套,比如:XXX[i].YYY(key).ZZZ,那么它會為你得到或者設置ZZZ的屬性。
  
  2、所有的set/get方法介紹:
  
  //對XXX(key)格式的name設值
  
  setMappedProperty(Object bean, String name,String key, Object value)
  
  //對XXX[i]格式的name設值
  
  setIndexed

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕自拍vr一区二区三区| 91超碰中文字幕久久精品| 国产亚洲美女久久| 成人免费淫片视频软件| 日韩福利视频在线观看| 国产999精品久久久| 久久久免费av| 色香阁99久久精品久久久| 久精品免费视频| 国产日韩综合一区二区性色av| 51久久精品夜色国产麻豆| 国产成人精品免费视频| 国产精品爽爽爽爽爽爽在线观看| 亚洲欧美日韩精品久久| 色综合久综合久久综合久鬼88| 国产97在线视频| 韩国精品美女www爽爽爽视频| 国产精品美女免费| 久久电影一区二区| 欧美一区二区.| 亚洲免费伊人电影在线观看av| 亚洲va欧美va国产综合久久| 亚洲人高潮女人毛茸茸| 国产suv精品一区二区三区88区| 91在线高清视频| 精品中文字幕视频| 久久久精品免费| 欧美日韩一区二区免费视频| 国产精品中文久久久久久久| 久久中文精品视频| 欧美在线xxx| 日本欧美国产在线| 日本欧美中文字幕| 亚洲аv电影天堂网| 欧美在线观看网站| 中文字幕一精品亚洲无线一区| 日韩欧美高清视频| 91精品久久久久久久久久另类| 成人午夜高潮视频| 亚洲成人黄色在线观看| 在线性视频日韩欧美| 国产精品高清网站| 国产视频一区在线| 亚洲摸下面视频| 亚洲自拍偷拍网址| 性欧美xxxx| 日韩电影第一页| 亚洲欧美中文日韩在线v日本| 日韩电影中文 亚洲精品乱码| 亚洲综合成人婷婷小说| 国产精品久久久久久久久免费看| 日韩精品视频观看| 国产精品久久久久99| 欧美一级视频免费在线观看| 4438全国亚洲精品在线观看视频| 欧美日韩性视频| 欧美日韩免费在线观看| 亚洲热线99精品视频| 国产精品福利片| 亚洲国产精彩中文乱码av在线播放| 色哟哟网站入口亚洲精品| 日韩中文第一页| 亚洲自拍欧美色图| 亚洲欧洲一区二区三区久久| 久久久精品视频成人| 亚洲一区第一页| 国产在线精品一区免费香蕉| 国产色婷婷国产综合在线理论片a| 日韩av免费网站| 欧洲成人在线视频| 中文字幕久热精品在线视频| 国产99久久久欧美黑人| 奇门遁甲1982国语版免费观看高清| 久久久精品免费| 国产精品美女网站| 国产成人极品视频| 九九热精品视频在线播放| 欧美中文在线视频| 欧美日韩国产成人在线| 高清欧美电影在线| 亚洲美女av在线| 亚洲aa在线观看| 亚洲国产精品成人精品| 亚洲日本成人网| 亚洲资源在线看| 亚洲综合社区网| 久久国产精品偷| 曰本色欧美视频在线| 曰本色欧美视频在线| 一区二区三区四区视频| 成人免费看吃奶视频网站| 亚洲香蕉成人av网站在线观看| 欧美在线一级视频| 亚洲最新av在线网站| 日韩专区在线播放| 麻豆精品精华液| 91久久精品美女| 91香蕉嫩草神马影院在线观看| 欧美在线精品免播放器视频| 成人在线视频网| 精品福利樱桃av导航| 亚洲国产精品网站| 欧美一区三区三区高中清蜜桃| 成人免费黄色网| 亚洲国产成人精品女人久久久| 亚洲精品久久久久| 欧美电影在线播放| 久久久天堂国产精品女人| 精品久久久国产精品999| 亚洲欧美日韩一区二区三区在线| 九九热精品视频在线播放| 4p变态网欧美系列| 欧美激情中文字幕在线| 成人免费在线视频网站| 日韩在线观看免费高清| 日韩电影在线观看免费| 曰本色欧美视频在线| 色老头一区二区三区在线观看| 精品国模在线视频| 成人国产精品久久久| 亚洲国产天堂网精品网站| 国产美女扒开尿口久久久| 日韩免费在线电影| 在线色欧美三级视频| 色播久久人人爽人人爽人人片视av| 亚洲成人999| 亚洲色在线视频| 亚洲国产精品电影在线观看| 日韩网站免费观看| 亚洲国产精品va在线观看黑人| 98精品国产高清在线xxxx天堂| 欧美丰满少妇xxxxx| 中文字幕亚洲欧美日韩高清| 日韩高清免费观看| 亚洲性69xxxbbb| 欧美国产在线视频| 欧洲成人免费aa| 久久全球大尺度高清视频| 久久久精品久久| 日韩av在线影视| 亚洲欧美精品中文字幕在线| 欧美激情精品在线| 一区二区三区国产视频| 91精品在线观看视频| 欧美做爰性生交视频| 欧美激情亚洲自拍| 国产精品久久久久久久久久三级| 97视频在线观看视频免费视频| 日本伊人精品一区二区三区介绍| 亚洲视频一区二区| 亚洲已满18点击进入在线看片| 国产精品视频成人| 欧美激情久久久| 欧美日韩在线一区| 国产精品一二区| 少妇高潮 亚洲精品| 91在线视频成人| 国产日韩在线一区| 国产99久久久欧美黑人| 日韩精品高清在线| 久久精品99久久香蕉国产色戒| 亚洲天堂网站在线观看视频| 一区二区三区 在线观看视| 国产欧美日韩丝袜精品一区|