1、内省(Introspector) — JavaBean
内省基于反射实现,主要用于操作JavaBean,通过内省 可以获取bean的getter/setter
2、为什么要学内省?
开发框架时,经常需要使用java对象的属性来封装程序的数据,每次都使用反射技术完成此类操作过于麻烦,所以SUN公司开发了一套API,专门用于操作java对象的属性。
3、什么是JavaBean和属性的读写方法?
通过内省技术访问(java.beans包提供了内省的API)JavaBean的两种方式。
1)通过PropertyDescriptor类操作Bean的属性
2)通过Introspector类获得Bean对象的 BeanInfo,然后通过 BeanInfo 来获取属性的描述器( PropertyDescriptor ),通过这个属性描述器就可以获取某个属性对应的 getter/setter 方法,然后通过反射机制来调用这些方法。
4、PropertyDescriptor
PropertyDescriptor顾名思义,就是属性描述之意。它通过反射
快速操作JavaBean的getter/setter方法。
重要方法:
getWriteMethod() – 获取setter方法,返回Method对像
getReadMethod() – 获取getter方法,返回Method对像
@Test
public void test1() throws Exception{
//得到Student类中的属性,被封装到了BeanInfo中
BeanInfo bi = Introspector.getBeanInfo(Student.class);
//得到类中的所有的属性描述器
PropertyDescriptor[] pds = bi.getPropertyDescriptors();
System.out.println(pds.length);
for(PropertyDescriptor pd:pds){
System.out.println(pd.getName());
}
}
@Test
public void test2() throws Exception{
Student s = new Student();
PropertyDescriptor pd = new PropertyDescriptor("name", Student.class);
Method m = pd.getReadMethod();//得到getName()方法
String value = (String)m.invoke(s, null);
System.out.println(value);
Method m1 = pd.getWriteMethod();//得到setName()方法
m1.invoke(s, "王云");//改变name的值
System.out.println(s.getName());
}