使用内省(Introspector)操作bean属性

1.什么是bean属性

先看下面的示例代码:

public class Car {
private String name="aaa";
private int size=12;


public Car(){
	
}

public Car(String name, int size) {
	this.name = name;
	this.size = size;
	
}

public String getA(){
	return null;
}


public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
public int getSize() {
	return size;
}
public void setSize(int size) {
	this.size = size;
}

}


在这段代码中,有getA()   getName()   setName()   getSize()   setSize()  这几个方法

一共有的bean属性有 a , name ,size , class  这四个bean属性。所以我们可以看出,当一个字段有了get或set方法中的至少一个时,那么这个字段就可以称为bean属性。

那么就不难理解name .size为bean属性 。class为bean属性的原因是Car的父类Object中有一个方法getClass()方法。a 为bean属性也是因为有getA()方法。


2.下面开始讲解如何得用Introspector(内省)这个类来操作这些bean属性

a.获取某一个类的所有bean属性信息

		BeanInfo bi=Introspector.getBeanInfo(Car.class);//获取类Car的bean属性信息
		//BeanInfo bi=Introspector.getBeanInfo(Car.class,Object.class);
		//除去其父类Object的属性
		PropertyDescriptor[]pds=bi.getPropertyDescriptors();
		for(PropertyDescriptor pd:pds)
		{
			System.out.println(pd.getName());
		}
结果为:

a

class

name

size


b.获取一个类的某个bean属性

		Car c=new Car();
		PropertyDescriptor pd=new PropertyDescriptor("name",Car.class);//获取字段名称为name的描述器
		Method m1=pd.getWriteMethod();//获取name属性的setName(String name)方法
		m1.invoke(c, "23");//调用方法
		Method m2=pd.getReadMethod();//获取name属性的getName()方法
		System.out.println(m2.invoke(c, null));

c.获取一个类的某个属性的类型
		Car c=new Car();
		PropertyDescriptor pd=new PropertyDescriptor("name",Car.class);
		System.out.println(pd.getPropertyType());


你可能感兴趣的:(java)