javaBean是一种特殊的java类,主要用于传递数据信息,这种java类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。
如果要在两个模块之间传递多个信息,可以将这些信息封装到一个javaBean中,这中javaBean的实例对象通常称之为值对象(vo)。这些信息用私有字段来存储,如果读取或设置这些字段的值,则需要通过一些相应的方法来访问,大家觉得这些方法的名称叫什么好呢?javabean的属性是根据其中的setter和getter方法来确定的,而不是根据其中的成员变量。如果方法名为setId,即设置id,至于你把它存到哪个变量上,用管么?如果方法为getId,即获得id,至于你从那个变量上取,用管么?去掉set前缀,剩余部分就是属性名,如果剩余部分的第二个字母是小写的,则把剩余部分的首字母改成小的。
自己敲得实例代码:
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.Date;
import com.itcast.testBean.Person;
/**
*
* 类说明:内省方法实现
* 作者:test
* 版本:v1.0
* 修改历史:
*/
public class IntorSpectorTest {
/**
* @param args
*/
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
Person p = new Person("sps",22,new Date(89,8,8));
String propertyName="age";
Object retVal=getProperty(p, propertyName);
System.out.println(retVal);
Object value=20;
setProperty(p, propertyName, value);
System.out.println(p.getAge());
}
private static Object getProperty(Object p, String propertyName)
throws IntrospectionException, IllegalAccessException,
InvocationTargetException {
Object retVal=null;
/* PropertyDescriptor pd=new PropertyDescriptor(propertyName, p.getClass());
Method mothod=pd.getReadMethod();
retVal=mothod.invoke(p);*/
/**
* 方法二上面为方法一
*/
BeanInfo beanInfo=Introspector.getBeanInfo(p.getClass());
PropertyDescriptor[] pds=beanInfo.getPropertyDescriptors();
for(PropertyDescriptor pd:pds){
if(pd.getName().equals(propertyName)){
Method mothod=pd.getReadMethod();
retVal=mothod.invoke(p);
}
}
return retVal;
}
private static void setProperty(Object p, String propertyName, Object value)
throws IntrospectionException, IllegalAccessException,
InvocationTargetException {
PropertyDescriptor pd2=new PropertyDescriptor(propertyName, p.getClass());
Method mothod2=pd2.getWriteMethod();
mothod2.invoke(p, value);
}
}
总之,一个类被当做javaBean使用时,javaBean的属性是根据方法名推断出来的,它根本看不到java内部的成员变量。内省操作javaBean的方式。