最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java反射中java.beans包學(xué)習(xí)總結(jié)

 更新時(shí)間:2018年02月22日 10:02:23   作者:若魚1919  
本篇文章通過學(xué)習(xí)Java反射中java.beans包,吧知識(shí)點(diǎn)做了總結(jié),并把相關(guān)內(nèi)容做了關(guān)聯(lián),對(duì)此有需要的朋友可以學(xué)習(xí)參考下。

之前一直以為PropertyEditor是SpringMVC提供的,今天才知道這個(gè)是jdk提供的,汗顏??!

這個(gè)東西能干啥用呢?可以把字符串轉(zhuǎn)成一個(gè)bean對(duì)象,spring mvc在把form表單映射到controller的入?yún)?duì)象就是利用的這個(gè)東西。

看一個(gè)例子:

NodeDO.java:一個(gè)標(biāo)準(zhǔn)的javabean對(duì)象

public class NodeDO {
	private String name;
	private String email;
	private Date date;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public Date getDate() {
		return date;
	}
	public void setDate(Date date) {
		this.date = date;
	}
	@Override
	public String toString() {
		return "NodeDO [name=" + name + ", email=" + email + ", date=" + DodeDOEditor.sdf.format(date) + "]";
	}
}

TestDO.java一樣,里面引用了NodeDO:

public class TestDO { 
  private String nodeName; 
  private NodeDO nodeDO; 
  public String getNodeName() { 
    return nodeName; 
  } 
  public void setNodeName(String nodeName) { 
    this.nodeName = nodeName; 
  } 
  public NodeDO getNodeDO() { 
    return nodeDO; 
  } 
  public void setNodeDO(NodeDO nodeDO) { 
    this.nodeDO = nodeDO; 
  } 
}

我們想實(shí)現(xiàn)類似這樣的功能:

public static void main(String[] args) throws Exception{ 
    Map<String, String> parameters = new HashMap<String, String>(){ 
      { 
        put("nodeName", "小胖測(cè)試"); 
        put("nodeDO", "xiaopang|xiaopang@163.com|2015-10-20 12:00:00"); 
      } 
    };  
    TestDO testDo = convert(parameters); 
    System.out.println(testDo.getNodeName()); 
    System.out.println(testDo.getNodeDO()); 
  }

把parameters這個(gè)map轉(zhuǎn)化成TestDO的對(duì)象,該如何來(lái)做呢?

(1)首先要定義一個(gè)用來(lái)轉(zhuǎn)化Property的PropertyEditor:

public class DodeDOEditor extends PropertyEditorSupport{ 
   
  public static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
   
  @Override 
  public void setAsText(String text) throws IllegalArgumentException{ 
    String[] tokens = text.split("\\|"); 
    NodeDO nodeDo = new NodeDO(); 
    nodeDo.setName(tokens[0]); 
    nodeDo.setEmail(tokens[1]); 
    try{ 
      nodeDo.setDate(sdf.parse(tokens[2])); 
    }catch(ParseException e){ 
      throw new IllegalArgumentException(e); 
    } 
    setValue(nodeDo); 
  } 
} 

(2)做轉(zhuǎn)化:

public class PropertyEditorSample { 
 
  static{ 
    PropertyEditorManager.registerEditor(NodeDO.class, DodeDOEditor.class); 
  } 
   
  public static void main(String[] args) throws Exception{ 
    Map<String, String> parameters = new HashMap<String, String>(){ 
      { 
        put("nodeName", "小胖測(cè)試"); 
        put("nodeDO", "xiaopang|xiaopang@163.com|2015-10-20 12:00:00"); 
      } 
    };  
    TestDO testDo = convert(parameters); 
    System.out.println(testDo.getNodeName()); 
    System.out.println(testDo.getNodeDO()); 
  } 
 
  private static TestDO convert(Map<String, String> parameters)throws Exception { 
    TestDO testDO = new TestDO(); 
    BeanInfo bi = Introspector.getBeanInfo(TestDO.class);  
    PropertyDescriptor[] pds = bi.getPropertyDescriptors();  
    for(PropertyDescriptor pd : pds){ 
      Class<?> propertyType = pd.getPropertyType(); 
      Method writeMethod = pd.getWriteMethod(); 
      if(propertyType == Class.class){ 
        //ignore 
      }else if(propertyType == String.class){ 
        writeMethod.invoke(testDO, parameters.get(pd.getName())); 
      }else{ 
        PropertyEditor editor = PropertyEditorManager.findEditor(propertyType); 
        if(editor != null){ 
          editor.setAsText(parameters.get(pd.getName())); 
          writeMethod.invoke(testDO, editor.getValue()); 
        }else{ 
          System.out.println("no editor for:"+pd.getName()); 
        } 
      } 
    } 
    return testDO; 
  } 
 
}

其實(shí)關(guān)鍵點(diǎn)就兩句話

<pre name="code" class="java">editor.setAsText(parameters.get(pd.getName()));//1 
editor.getValue();//2 
//因此,一般都會(huì)在setAsText中去調(diào)用setValue()來(lái)保存轉(zhuǎn)化以后的值,這樣通過getValue()就能獲取到了 

以上就是本次整理的全部?jī)?nèi)容,如果大家還有任何不明白的地方,可以在下方留言討論,感謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Java中的Map接口實(shí)現(xiàn)類HashMap和LinkedHashMap詳解

    Java中的Map接口實(shí)現(xiàn)類HashMap和LinkedHashMap詳解

    這篇文章主要介紹了Java中的Map接口實(shí)現(xiàn)類HashMap和LinkedHashMap詳解,我們常會(huì)看到這樣的一種集合,IP地址與主機(jī)名,等,這種一一對(duì)應(yīng)的關(guān)系,就叫做映射,Java提供了專門的集合類用來(lái)存放這種對(duì)象關(guān)系的對(duì)象,需要的朋友可以參考下
    2024-01-01
  • SpringBoot通過ip獲取歸屬地的幾種方式分享

    SpringBoot通過ip獲取歸屬地的幾種方式分享

    在日常我們逛網(wǎng)站的時(shí)候會(huì)發(fā)現(xiàn)我們登錄后會(huì)出現(xiàn)歸屬地信息,例如:我在廣州登錄會(huì)顯示廣東廣州,有些更加精確的會(huì)顯示到區(qū)縣,那么我們來(lái)看看有哪些方式來(lái)獲取歸屬地信息,今天我們來(lái)聊一聊
    2023-09-09
  • Java可視化之實(shí)現(xiàn)文本的加密和解密

    Java可視化之實(shí)現(xiàn)文本的加密和解密

    這篇文章主要介紹了Java可視化之實(shí)現(xiàn)文本的加密和解密,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • flink?RichFunction之坑及解決

    flink?RichFunction之坑及解決

    這篇文章主要介紹了flink?RichFunction之坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • SpringMVC中的handlerMappings對(duì)象用法

    SpringMVC中的handlerMappings對(duì)象用法

    這篇文章主要介紹了SpringMVC中的handlerMappings對(duì)象用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java如何使用正則表達(dá)式從字符串中提取數(shù)字

    Java如何使用正則表達(dá)式從字符串中提取數(shù)字

    這篇文章主要介紹了Java如何使用正則表達(dá)式從字符串中提取數(shù)字問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Mybatis執(zhí)行update失敗的解決

    Mybatis執(zhí)行update失敗的解決

    這篇文章主要介紹了Mybatis執(zhí)行update失敗的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 淺析java中String類型中“==”與“equal”的區(qū)別

    淺析java中String類型中“==”與“equal”的區(qū)別

    這篇文章主要介紹了淺析java中String類型中“==”與“equal”的區(qū)別,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • JSON各種轉(zhuǎn)換問題(json轉(zhuǎn)List,json轉(zhuǎn)對(duì)象等)

    JSON各種轉(zhuǎn)換問題(json轉(zhuǎn)List,json轉(zhuǎn)對(duì)象等)

    這篇文章主要介紹了JSON各種轉(zhuǎn)換問題(json轉(zhuǎn)List,json轉(zhuǎn)對(duì)象等),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • Java中類的加載順序剖析(常用于面試題)

    Java中類的加載順序剖析(常用于面試題)

    這篇文章主要介紹了Java中類的加載順序剖析(常用于面試題),本文直接給出代碼實(shí)例和運(yùn)行結(jié)果,給后給出了加載過程總結(jié),需要的朋友可以參考下
    2015-03-03

最新評(píng)論

驻马店市| 兰考县| 丰台区| 二连浩特市| 平果县| 岳阳县| 墨江| 芜湖市| 蒲江县| 宝鸡市| 新乡县| 托里县| 集贤县| 渭源县| 沧州市| 翁牛特旗| 临湘市| 乐山市| 威宁| 绿春县| 读书| 辽中县| 上杭县| 云林县| 舒城县| 西青区| 迭部县| 仁怀市| 临潭县| 武穴市| 中卫市| 玛沁县| 雷州市| 长宁县| 竹山县| 和顺县| 普兰县| 常熟市| 长岭县| 兴业县| 镇沅|