读取JavaBean的属性
通过前面小节的学习知道,Java的内省可以修改JavaBean的属性,使用PropertyDescriptor类的getWriteMethod()方法就可以获取属性对应的setter方法。在JavaBean中,属性的getter和setter方法是成对出现的,因此Java的内省也提供了读取JavaBean属性的方法,只要使用PropertyDescriptor类的getReadMethod()方法即可。
为了让读者更好地掌握通过内省如何读取JavaBean的属性,接下来通过一个案例来演示,如例1所示。
例1 IntrospectorDemo03.java
1 package cn.itcast.chapter08.introspector;
2 import java.beans.PropertyDescriptor;
3 import java.lang.reflect.Method;
4 import cn.itcast.chapter08.javabean.Person;
5 public class IntrospectorDemo03 {
6 public static void main(String[] args) throws Exception {
7 //创建Person类的对象
8 Person p = new Person();
9 //通过直接调用setter方法的方式为属性赋值
10 p.setName("李芳");
11 p.setAge(18);
12 //使用属性描述器获取Person类name属性的描述信息
13 PropertyDescriptor pd = new PropertyDescriptor("name",p.getClass());
14 //获取name属性对应的getter方法
15 Method methodName = pd.getReadMethod();
16 //调用getter方法,并获取name属性值
17 Object o = methodName.invoke(p);
18 System.out.println("姓名:"+o);
19 //使用属性描述器获取Person类age属性的描述信息
20 pd = new PropertyDescriptor("age",p.getClass());
21 //获取name属性对应的setter方法
22 Method methodAge = pd.getReadMethod();
23 //调用getter方法,并获取age属性值
24 o = methodAge.invoke(p);
25 System.out.println("年龄:"+o);
26 }
27 }
运行结果如图1所示。
图1 运行结果
在例1中,首先创建Person类的实例,再通过实例调用setter方法直接为属性赋值,然后通过内省读取设置后的属性值。第17行代码用于获取Person类中的name属性的描述信息,第22行代码通过调用getReadMethod()方法获取name属性的getter方法,第24行代码调用getter方法,并获取name属性值。