黑马程序员-----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 {

    /**
     * 

メソッドの機能概要を記述してください.

* * @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

 

你可能感兴趣的:(黑马程序员-----javaBean的操作类学习笔记)