---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
一、简介
JavaBean是一中特殊的java类,主要用于传递数据信息,这种java类中的方法主要用于访问私有的字段,且方法名符合某种命名规则;
JDK中提供了对JavaBean进行操作的一些API,这套API就称为内省;
二、作用
JavaBean可以在两个模块之间传递多个信息,可以将这些信息封装到一个JavaBean中,这种JavaBean的实例对象通常称之为值对象。。
JavaBean中的信息都是私有属性的,这些私有的信息由类中的getter、setter方法来操作;
注意:一个类被当做JavaBean使用时,JavaBean的属性是根据公共的方法名推断出来的,它根本看不到java类内部的成员变量;
推断方式----->去掉getter、setter方法的get和set前缀;剩余部分就是属性名,如果剩余部分的第二个字母是小写的则把剩余部分的首字母改成小写的,否则不用改;
三、使用内省操作JavaBean的get和set方法
1、简单
public class Test1 {
public static void main(String[] args)throws Exception {
JavaBeanTest jbt = new JavaBeanTest();
String propertyName = "x";
Object value = 7;
PropertyDescriptor pd = new PropertyDescriptor(propertyName, jbt.getClass());
Method methodSetX = pd.getWriteMethod();
methodSetX.invoke(jbt,value);
Method methodGetX = pd.getReadMethod();
System.out.println(methodGetX.invoke(jbt));;
}
}
2、复杂
采用遍历BeanInfo的所有属性的方式来查找和设置某个JavaBean对象的属性,在程序中吧一个类当成JavaBean来看,就是调用Introspector.getBeanInfo
方法,得到BeanInfo对象封装了把这个类当作JavaBean看的结果信息;
BeanInfo beanInfo = Introspector.getBeanInfo(jbt.getClass());
PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
Object retVal = null;
for(PropertyDescriptor pd:pds){
if(pd.getName().equals(propertyName)){
Method method = pd.getReadMethod();
retVal = method.invoke(jbt);
break;
}
}
return retVal;
四、Beanutils工具包(阿帕奇)
使用:先导入beanutils包和logging包
getProperty();
setProperty();
BeanUtils不仅能提供便捷的Bean操作,还具备很多其他的功能,例如用Describe将Bean类的属性值变成Map集合,例如Key:Age value:7
或者用populate功能,将Map的内容填充到Bean里面,等等。
BeanUtils在操作的时候,实现了String类型的转换,以String类型对JavaBean进行操作。propertyUtils在操作的时候,以属性本身对JavaBean进行操作。具体使用那个,看实际需求。
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
详细请查看:<a href="http://edu.csdn.net" target="blank">http://edu.csdn.net</a>