-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
1.JavaBean的概念:特殊的Java类,符合某种规则。
JavaBean的规则:getXxx,setXxx 方法
2.内省的概念:(Introspector)是Java语言对 JavaBean类属性的一种处理方法
3.PropertyDescriptor(属性描述器)
getReadMethod()获得应该用于读取属性值的方法。
getWriteMethod() 获得应该用于写入属性值的方法。
代码示例:
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import Study.Person;
public class JavaBeanTest {
public static void main(String[] args)throws Exception {
Person p1 = new Person("zhansan",18);
PropertyDescriptor pd = new PropertyDescriptor("name", p1.getClass());//创建属性描述器
getValue(p1, pd);
Object value = 20;
PropertyDescriptor pd1 = new PropertyDescriptor("age", p1.getClass());//创建属性描述器
setValue(p1, value, pd1);
}
public static void setValue(Person p1, Object value, PropertyDescriptor pd1)throws Exception {
Method setMethod = pd1.getWriteMethod();//通过属性描述器获取设置属性的方法
setMethod.invoke(p1, value);//调用设置属性的方法,
System.out.println(p1.getAge());//使用对象的方法输出设置后的值
}
public static void getValue(Object obj, PropertyDescriptor pd)throws Exception {
Method getMethod = pd.getReadMethod();//通过属性描述器获取得到属性的方法
Object retval = getMethod.invoke(obj);//调用设置属性的方法。
System.out.println(retval);
}
}
运行结果:
zhansan
20
通过JavaBean获取属性描述器:
Introspector-->getBeanInfo(Class> beanClass) -->BeanInfo-->getPropertyDescriptors()
-->getReadMethod()或getWriteMethod() -->Method-->invoke(Object obj,Object... args)
import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import Study.Person;
public class JavaBeanTest {
public static void main(String[] args) throws Exception{
Person p1 = new Person("lisi",30);
BeanInfo beaninfo = Introspector.getBeanInfo(Person.class);//获取BeanInfo对象
PropertyDescriptor [] pds = beaninfo.getPropertyDescriptors();//获取所有属性描述器,存入数组中
for(PropertyDescriptor pd : pds){
if(pd.getName().equals("name")){//判断属性的名字是否为name
Method getNameMethod = pd.getReadMethod();//获取方法对象
System.out.println(getNameMethod.invoke(p1));//调用指定对象上的该方法,并输出
}
}
}
}
运行结果:
lisi
4.方法描述器(MethodDescriptor)
Introspector-->getBeanInfo(Class> beanClass) -->BeanInfo-->getMethodDescriptors()
-->Method-->invoke(Object obj,Object... args)
代码示例:
import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.MethodDescriptor;
import Study.Person;
public class JavaBeanTest {
public static void main(String [] args)throws Exception{
Person p = new Person();
methodDescriptor(p);
}
public static void methodDescriptor(Object obj)throws Exception{
BeanInfo objbeanifo = Introspector.getBeanInfo(obj.getClass());//获取BeanInfo对象
MethodDescriptor [] methods = objbeanifo.getMethodDescriptors();//获取所有方法描述器,存入数组中
for(MethodDescriptor method : methods){//遍历数组
if(method.getName().equals("getAge")){//判断方法的名字
System.out.println(method.getMethod().invoke(obj));//获取方法的对象并调用指定对象上的该方法,并输出
}
}
}
}
运行结果:
0
5.BeanUtils工具包使用:
建lib库-->j将下载好的BeanUtils工具包拷贝到lib目录下-->右键build path-->add build path-->longging包同样的方法添加到库中。
代码示例:
import org.apache.commons.beanutils.BeanUtils;
import Study.Person;
public class BeanUtilsTest {
public static void main(String [] args)throws Exception{
Person p1 = new Person();
BeanUtils.setProperty(p1, "name", "zhansan");//使用BeanUtils工具包给p1对象属性赋值
BeanUtils.setProperty(p1, "age", 25);
System.out.println(BeanUtils.getProperty(p1, "name"));//使用BeanUtils工具包取出p1对象属性的值,并输出
System.out.println(BeanUtils.getProperty(p1, "age"));
}
}
运行结果:
zhansan
25
-----------android培训、java培训、java学习型技术博客、期待与您交流!------------