内省:IntroSpector 检查、视察 主要用于对Javabean进行操作
Javabean是一种特殊的java类,亦可用作普通类使用,这种类中的方法主要用于访问类的私有字段,且方法符合某种命名规则(成员方法包含有get、set方法)。
class Person
{
private int x;
public int getAge()
{
return x;
} public void setAge(int age)
{
this.x = age;
}
}
如上例,Person当做普通类,则它有一个名为X的属性,如果视为Javabean,则其有一个名为age(如果属性名第二个字母为小写,则把第一个字母改成小写)的属性。
Javabean的简单内省操作:
String propertyName = "x";//得到属性名称
PropertyDescriptor pd = new PropertyDescriptor(propertyName, p1.getClass());
Method methodGetX = pd.getReadMethod();//获得只读方法,若要获得set方法则调用getWriteMethod();
Object retVal = methodGetX.invoke(pd);
Javabean的复杂内省操作:
BeanInfo beanInfo = Introspector.getBeanInfo(p1.getClass());//得到BeanInfo类封装了把这个类当做JavaBean看的结果信息
PropertyDescriptor [] pd1 = beanInfo.getPropertyDescriptors();//获得类所有的属性
for(PropertyDescriptor pd:pd1)
{
if(pd.getName().equals(propertyName))
{
Method methodGetX = pd.getReadMethod();
Object retVal = methodGetX.invoke(pd);
break;
}
}