1扼睬、內(nèi)省(Introspector) — JavaBean
內(nèi)省基于反射實現(xiàn),主要用于操作JavaBean悴势,通過內(nèi)省 可以獲取bean的getter/setter
2窗宇、為什么要學內(nèi)省特纤?
開發(fā)框架時军俊,經(jīng)常需要使用java對象的屬性來封裝程序的數(shù)據(jù),每次都使用反射技術完成此類操作過于麻煩捧存,所以SUN公司開發(fā)了一套API粪躬,專門用于操作java對象的屬性担败。
3、什么是JavaBean和屬性的讀寫方法?
通過內(nèi)省技術訪問(java.beans包提供了內(nèi)省的API)JavaBean的兩種方式镰官。
1)通過PropertyDescriptor類操作Bean的屬性
2)通過Introspector類獲得Bean對象的 BeanInfo提前,然后通過 BeanInfo 來獲取屬性的描述器( PropertyDescriptor ),通過這個屬性描述器就可以獲取某個屬性對應的 getter/setter 方法朋魔,然后通過反射機制來調(diào)用這些方法岖研。
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());
}