国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - JAVA教程 - Java反射中java.beans包學習總結

Java反射中java.beans包學習總結

2021-04-06 11:27若魚1919 JAVA教程

本篇文章通過學習Java反射中java.beans包,把知識點做了總結,并把相關內容做了關聯,對此有需要的朋友可以學習參考下。

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

這個東西能干啥用呢?可以把字符串轉成一個bean對象,spring mvc在把form表單映射到controller的入參對象就是利用的這個東西。

看一個例子:

NodeDO.java:一個標準的javabean對象

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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;
  }
}

我們想實現類似這樣的功能:

?
1
2
3
4
5
6
7
8
9
10
11
public static void main(String[] args) throws Exception{
    Map<String, String> parameters = new HashMap<String, String>(){
      {
        put("nodeName", "小胖測試");
        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這個map轉化成TestDO的對象,該如何來做呢?

(1)首先要定義一個用來轉化Property的PropertyEditor:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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)做轉化:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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", "小胖測試");
        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;
  }
 
}

其實關鍵點就兩句話

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

以上就是本次整理的全部內容,如果大家還有任何不明白的地方,可以在下方留言討論,感謝大家對服務器之家的支持。

原文鏈接:http://blog.csdn.net/goldenfish1919/article/details/49275973

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产午夜精品一区二区三区嫩草 | 亚洲无吗电影 | 日本丶国产丶欧美色综合 | 亚洲精品一区二区三区在线观看 | 亚洲欧洲成人 | 成人精品视频99在线观看免费 | 欧洲精品在线观看 | 九一视频在线免费观看 | 欧美午夜精品一区二区三区电影 | 成人综合视频网 | 91超碰在线观看 | 国产噜噜噜噜噜久久久久久久久 | 自拍三区| 黄色片网站 | 国产精品国产三级国产aⅴ 成人在线免费看 | 久久综合久久综合久久 | 国产精品免费久久久久久 | av免费网站 | 日韩6699人妻熟女毛片 | 国产精品福利91 | 国产一区二区三区久久久 | 激情久久网 | 日韩城人网站 | 欧美大片免费在线观看 | 国产第一区二区三区 | 成人免费视频008 | 久久久极品 | 久久精品一区二区三区四区 | 日韩免费视频 | 亚洲一区中文字幕在线观看 | 一区久久| 亚洲精品久久久久久下一站 | www.天天操 | 免费的黄视频 | 97视频久久久| 欧美日韩久久精品 | 久re在线 | 在线国产一区二区 | 成人h视频在线观看 | 亚洲日本韩国在线观看 | 亚洲国产区|