---------------------- android培训、java培训、期待与您交流! ----------------------
什么是javabean呢?举个例子说明一下
package bean;
public class Student {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
符合以上规范的java类就可以说是一个javabean了。
什么是javabean的内省呢?内省就是操作javabean的api。
一个简单的例子:通过内省操作,对Student类中的属性赋值并且显示属性值
package bean;
import java.beans.PropertyDescriptor;
public class MyBean {
/**
* @param args
*/
public static void main(String[] args)throws Exception {
String propertyName1="age"; //javabean中的age属性
String propertyName2="name";//javabean中的name属性
Student stu=new Student();
PropertyDescriptor pd1=new PropertyDescriptor(propertyName1,stu.getClass());
PropertyDescriptor pd2=new PropertyDescriptor(propertyName2,stu.getClass());
pd1.getWriteMethod().invoke(stu, 12);
pd2.getWriteMethod().invoke(stu, "Jim");
System.out.println(pd1.getReadMethod().invoke(stu));
System.out.println(pd2.getReadMethod().invoke(stu));
}
}
这就是一个javabean的简单内省操作。
复杂的javabean内省操作是使用BeanInfo和Introspector这个类来完成的
范例:
package bean;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
public class MyBean {
/**
* @param args
*/
public static void main(String[] args)throws Exception {
String propertyName1="age"; //javabean中的age属性
String propertyName2="name";//javabean中的name属性
Student stu=new Student();
PropertyDescriptor pd1=new PropertyDescriptor(propertyName1,stu.getClass());
PropertyDescriptor pd2=new PropertyDescriptor(propertyName2,stu.getClass());
pd1.getWriteMethod().invoke(stu, 12);
pd2.getWriteMethod().invoke(stu, "Jim");
System.out.println(getProperty(stu,propertyName1));
}
//使用复杂内省操作得到属性值
public static Object getProperty(Student stu,String propertyName) throws Exception
{
BeanInfo bean=Introspector.getBeanInfo(stu.getClass());
PropertyDescriptor[] pds=bean.getPropertyDescriptors();
Object reValue=null;
for(PropertyDescriptor pd:pds)
{
if(pd.getName().equals(propertyName))
{
reValue=pd.getReadMethod().invoke(stu);
break;
}
}
return reValue;
}
}
---------------------- android培训、java培训、期待与您交流! ----------------------