专题-内省
更新日期:
文章目录
内省
JavaBean和属性的概念
javaBean的特点
- 必须由默认的构造方法
- 字段都是私有的
- 提供针对字段的 getter 或 setter 方法(属性)
1 2 3 4 5 6 7 8 9 10
public class Person { private String name; // 叫字段 public String getName(){} // 读属性 public void setName(String name){} //写属性 private boolean married; //类似于 public boolean getMarried(){} public boolean isMarried(){} public void setMarried(){} }
内省就通过getter和setter设置 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 28 29 30 | public void testIt() throws Exception { Class<?> clazz = Class.forName("io.zhpooer.test.Person"); Person bean = (Person) clazz.newInstance(); PropertyDescriptor pd1 = new PropertyDescriptor("name", clazz); Method m1 = pd1.getWriteMethod(); // 获取name的写方法 m1.invoke(bean, "呵呵"); Method m2 = pd1.getReadMethod(); String name = (String)m2.invoke(bean, null); System.out.println(name); } @Test public void test2() throws Exception { Class<?> clazz = Class.forName("io.zhpooer.test.Person"); BeanInfo binfo = Introspector.getBeanInfo(clazz); PropertyDescriptor pds[] = binfo.getPropertyDescriptors(); for(PropertyDescriptor p : pds){ System.out.println(p.getName()); } } /** ouput: 呵呵 age class name **/ |
借助 org.apache.commons.beanutils.BeanUtils;
1 2 3 | Person p = (Person) clazz.newInstance(); BeanUtils.setProperty(p, "name", "钟欣桐"); BeanUtils.getProperty(p, "name"); |