1 import java.beans.BeanInfo;
2 import java.beans.IntrospectionException;
3 import java.beans.Introspector;
4 import java.beans.PropertyDescriptor;
5 import java.lang.reflect.Method;
6
7 import org.junit.Test;
8
9 //使用内省api操作bean的属性
10 public class Demo {
11
12 /**
13 *
14 * @throws Exception
15 *
16 */
17 //得到bean的所有属性
18 @Test
19 public void test1() throws Exception{
20 BeanInfo info = Introspector.getBeanInfo(Person.class,Object.class);
21
22 PropertyDescriptor[] pds = info.getPropertyDescriptors();
23
24 for(PropertyDescriptor pd : pds){
25 System.out.println(pd.getName());
26 }
27 }
28
29 //操纵bean的指定属性:age
30 @Test
31 public void test2() throws Exception{
32
33 Person p = new Person();
34
35 PropertyDescriptor pd = new PropertyDescriptor("age", Person.class);
36
37 //得到属性的写方法,为属性复制
38 Method method = pd.getWriteMethod();//public void setAge(){}
39
40 method.invoke(p, 32);
41
42 //获取属性的值
43 method = pd.getReadMethod();//public void getAge(){}
44 System.out.println(method.invoke(p, null));
45
46
47 }
48
49 //高级点的内容,获取当前操作属性的类型
50 @Test
51 public void test3() throws Exception{
52
53 Person p = new Person();
54
55 PropertyDescriptor pd = new PropertyDescriptor("age", Person.class);
56
57 System.out.println(pd.getPropertyType());
58 }
59
60
61 }