12.3 JavaBeans
1、简介
JavaBeans是一种特殊的Java类,是java软件组件模型的实现和规范,主要用于传递数据信息,这种java类中的方法主要用于访问私有的字段,且方法名符合某种命名规则,
一个标准的JavaBeans组件具有以下特性:
⑴、它是一个公开的类、
⑵、它有一个默认的构造方法,也就是不带参数的构造方法;
⑶、它提供setXXX()方法和getXXX()方法来让外部程序设置和获取javaBean的属性。注意set方法没有返回值,get方法没有参数。
⑷、它实现java.io.Serializable或者java.io.Externalizable接口,以支持序列化。
如果要在两个模块之间传递多个信息,可以将这些信息封装到一个JavaBean中,这种JavaBean的实例对象通常称之为值对象(Value Object,简称VO)。这些信息在类中用私有字段来存储,如果读取或设置这些字段的值,则需要通过一些相应的方法来访问,大家觉得这些方法的名称叫什么好呢?JavaBean的属性是根据其中的setter和getter方法来确定的,而不是根据其中的成员变量。如果方法名为setId,中文意思即为设置id,至于你把它存到哪个变量上,用管吗?如果方法名为getId,中文意思即为获取id,至于你从哪个变量上取,用管吗?去掉set前缀,剩余部分就是属性名,如果剩余部分的第二个字母是小写的,则把剩余部分的首字母改成小的。
2、内省综合案例
publicclass IntroSpectorTest {
privatestatic String propertyName;
publicstaticvoidmain(String[] args) throws Exception {
ReflectPoint pt = new ReflectPoint(1,5);
propertyName = "x";
//"x"-->"X"-->"getX"-->"MethodGetX"
PropertyDescriptor pd = newPropertyDescriptor(propertyName,pt.getClass());
Method methodGetX = pd.getReadMethod();
Object retVal = methodGetX.invoke(pt);
System.out.println(retVal);
Method methodSetX = pd.getWriteMethod();
methodSetX.invoke(pt,8);
System.out.println(pt.getX());
//采用遍历BeanInfo的所有属性方式来查找和设置某个ReflectPoint对象的x属性。在程序中把一个类当做javaBean来看 ,就是调用IntroSpector。getBeanInfo方法,得到的BeanInfo对象封装了把这个类当作javaBean看的结果信息。
System.out.println(getProperty(propertyName,pt));
}
privatestatic Object getProperty(StringpropertyName,ReflectPoint pt)
throws Exception {
BeanInfo beanInfo = Introspector.getBeanInfo(pt.getClass());
//获得所有属性
PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
Object retVal = null;
for(PropertyDescriptor pd : pds) {
if(pd.getName().equals(propertyName)) {
MethodmethodGetX = pd.getReadMethod();
retVal = methodGetX.invoke(pt);
}
}
return retVal;
}
}
3、Beanutils工具包
⑴、Beanutils类可以对Javabean进行操作
BeanUtils.getProperty() ,
BeanUtils.setProperty(pt1,"x","9")
set里的X是int 但是我们Beanutils设置值的时候是用String类型设置进去的,返回也是String类型的。
⑵、PropertiesUtils类
PropertiesUtils.setProperty(pt1,"x",9);
BeanUtils是以字符串的形式对javabean进行操作,而//PropertyUtils工具类传入的参数和拿出的参数必须和属性本身的类型一致,这是两者的区别。
⑶、利用BeanUtils工具实现JavaBean与Map的转换
{
ReflectPointrp = new ReflectPoint(12,8);
Mapmap = BeanUtils.describe(rp);
System.out.println(map);
BeanUtils.setProperty(map, "name", "xx");
System.out.println(map);
}