黑马程序员_内省和JavaBean笔记

------- android培训java培训、期待与您交流! ----------

JavaBean

JavaBean是一种特殊的符合一种特殊书写方式的Java类。JavaBean的属性可以由get和set方法推断得到。get和set方法的名称书写规范是get+JavaBean的属性名、set+JavaBean的属性名。这个类的成员变量(与JavaBean的属性名不是一回事)起什么名字无所谓,因为成员变量是私有的,外界看不到。

下面的例子里定义了一个Person类,它有一个age属性。这个类就符合JavaBean的书写规范,可以看成是一个JavaBean。

我们可以知道这个类有一个setAge方法和一个getAge方法。由于它是一个JavaBean,所以我们就可以从方法名字中提取出它的属性名。

public class Person {
	//成员变量
	private int x;
	//set方法
	public void setAge(int age){
		x = age;
	}
	//get方法
	public int getAge(){
		return x;
	}
}

javaBean的应用:

在开发中,我们经常需要将一个模块中的数据传递到另一个模块中去,我们就把这些传递的数据当成一个JavaBean来处理。这种JavaBean类的实例化对象称为值对象VO(Value Object)。

Introspector内省

下面我们用内省的方式操作JavaBean
首先我们先定义一个JavaBean类
public class Person {
	private int x;
	private int y;
	Person(){}
	public Person(int age, int height){
		this.x = age;
		this.y = height;
	}
	public int getAge() {
		return x;
	}
	public void setAge(int age) {
		this.x = age;
	}
	public int getHeight() {
		return y;
	}
	public void setHeight(int height) {
		this.y = height;
	}
}

我们只知道这个类的属性名,存放在一个字符串中,我们要得到它的值,必须要先把它转化为get方法的名字,然后通过方法的反射调用获得它的值。内省用它的一套办法简化了上面这个操作。
下面用内省的方式操作JavaBean。
获取age的值
		//创建对象
		Person p1 = new Person(24,178);
		//对象的属性名存在字符串中
		String propertyName = "age";
		//把Person作为JavaBean,通过内省的方法操作JavaBean
		PropertyDescriptor pd = new PropertyDescriptor(propertyName, p1.getClass());
		//得到Person对应属性名的get方法
		int retVal = (int)pd.getReadMethod().invoke(p1);
		//打印
		System.out.println(retVal);
修改height的值
		//属性名
		String propertyName2 = "height";
		//内省的方式操作javaBean
		PropertyDescriptor pd2 = new PropertyDescriptor(propertyName2, p1.getClass());
		//获得对应属性的set方法,反射方式调用
		pd2.getWriteMethod().invoke(p1, 180);

另外一种较为复杂的获取值的实现方法:(读取类似)
		BeanInfo beanInfo = Introspector.getBeanInfo(p1.getClass());
		PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
		Object retVal = null;
		for(PropertyDescriptor pd : pds){
			if(pd.getName().equals(propertyName)){
				retVal = (Object)pd.getReadMethod().invoke(p1);
				break;
			}
		}
		System.out.println(retVal);

BeanUtils工具包

apache为JavaBean的操作提供了BeanUtils工具包,简化操作。
BeanUtils工具包需要到apache官网下载,而且还需要一个logging的工具包。
下面是用BeanUtils对JavaBean进行get和set,注意虽然age的值是int类型,但是我们我们需要传入字符串类型
		//set
		BeanUtils.setProperty(p1,"age","35");
		//get
		System.out.println(BeanUtils.getProperty(p1, "age"));
如果一个JavaBean对象的属性又是一个JavaBean对象,我们可以用属性级联的方式对其进行get和set。
假设上面的age是Date()类型的,Date()有一个方法是setTime(),也就是有一个time的属性,那么:
		//set
		BeanUtils.setProperty(p1,"age.time","35");
		//get
		System.out.println(BeanUtils.getProperty(p1, "age.time"));


其他:
1. JavaBean和Map之间可以互相转化
2. PropertyUtils与BeanUtils在设置属性上类似,但是PropertyUtils操作的不是字符串,而是属性的原本类型。
------- Windows Phone 7手机开发.Net培训、期待与您交流! -------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值