首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

黑马软件工程师-javaBean的操作类学习笔记

2012-08-27 
黑马程序员-----javaBean的操作类学习笔记---------------------- android培训、java培训、期待与您交流! --

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

?

热点排行