黑马程序员-----javaBean的操作类学习笔记
---------------------- android培训、java培训、期待与您交流! ----------------------
javaBean 由方法可得知其有什么属性:
?如果get或set方法后面所跟的单词的第二个字母是小的,则把第一个字母改成小的
?反之则保持第一个字母的大小写。
??方法?->?属性名
??gettime -> ?time
??setTime ->? time
??getCPU?->?CPU
?
对javaBean操作的2个类:PropertyDescriptor(属性描述类)和Introspector(内省)
?简单方法一:根据javaBean类创建属性描述类:
????PropertyDescriptor pd2 = new PropertyDescriptor(propertyName,Object.getClass());
????这里propertyName为javaBean中的属性名,Object是javaBean类。
????Method methodSet = pd2.getWriteMethod()这个方法就能取得该javaBean的相应属性的set方法。
????methodSetX.invoke(obj, value);这样就可以给javaBean的相应属性赋值。
????
?复杂方法二:Introspector类:
????BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
?????//这里obj不一定是javaBean,但是内省类将它当作javaBean来操作返回BeanInfo对象
????Object retValue = null;
????PropertyDescriptor []pds = beanInfo.getPropertyDescriptors();
????for(PropertyDescriptor pd : pds){
?????if(propertyName.equals(pd.getName())){
??????//这里propertyName为属性名
??????Method methodGetX = pd.getReadMethod();//同上
?????? retValue = methodGetX.invoke(obj);
??????break;
?????}
????}
?超简单方法三:可以运用apache公司的扩展类BeanUtils(import org.apache.commons.beanutils.BeanUtils;)
package HEIMA_refelct;import java.beans.BeanInfo;import java.beans.IntrospectionException;import java.beans.Introspector;import java.beans.PropertyDescriptor;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import org.apache.commons.beanutils.BeanUtils;public class IntroSpectorTest { /** * <p>メソッドの機能概要を記述してください.</p> * * @param args */ public static void main(String[] args)throws Exception { ReflectPoint pt1 = new ReflectPoint(3,5); String propertyName = "x"; System.out.println(getProperties(pt1, propertyName)); int value = 7; setProperties(pt1, propertyName, value); BeanUtils.setProperty(pt1, propertyName, "9");//引用beanutils外来包, System.out.println(BeanUtils.getProperty(pt1, "x")); System.out.println(pt1.getX()); BeanUtils.setProperty(pt1, "birthday.time", 111); System.out.println(BeanUtils.getProperty(pt1, "birthday.time")); } private static void setProperties(Object obj, String propertyName, int value) throws IntrospectionException, IllegalAccessException, InvocationTargetException { PropertyDescriptor pd2 = new PropertyDescriptor(propertyName,obj.getClass());//PropertyDescriptor类表示JavaBean类通过存储器导出一个属性。 Method methodSetX = pd2.getWriteMethod(); methodSetX.invoke(obj, value); } private static Object getProperties(Object obj, String propertyName) throws IntrospectionException, IllegalAccessException, InvocationTargetException {// PropertyDescriptor pd = new PropertyDescriptor(propertyName,obj.getClass());//get和set方法必须为public否则会报异常// Method methodGetX = pd.getReadMethod();// Object retValue = methodGetX.invoke(obj); (方法一)!!!!!! BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());//运用内省取得javabean内的属性及其get和set方法,Introspector类将JavaBean中的属性封装起来进行操作。 //在程序把一个类当做JavaBean来看,就是调用Introspector.getBeanInfo()方法 Object retValue = null; PropertyDescriptor []pds = beanInfo.getPropertyDescriptors(); for(PropertyDescriptor pd : pds){ if(propertyName.equals(pd.getName())){ Method methodGetX = pd.getReadMethod(); retValue = methodGetX.invoke(obj); break; } } return retValue; }}
?
---------------------- android培训、java培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net/heima
?