java高新技术-操作javaBean

1. 对javaBean的简单内省操作

public class IntroSpectorTest {

    public static void main(String[] args) throws Exception{
        ReflectPoint pt1 = new ReflectPoint(3, 5);

        String propertyName = "x";
        //"x" --> "X" -->"getX" --> MethodGetX-->
        Object retVal = getProperty(pt1, propertyName);
        System.out.println(retVal);

        Object value = 7;
        setProperties(pt1, propertyName, value);

        System.out.println(pt1.getX());
    }

    private static Object getProperty(Object pt1, String propertyName) throws Exception{
        PropertyDescriptor pd = new PropertyDescriptor(propertyName, pt1.getClass());
        Method methodGetX = pd.getReadMethod();
        Object retVal = methodGetX.invoke(pt1);
        return retVal;
    }

    private static void setProperties(Object pt1, String propertyName, Object value) throws Exception{
        PropertyDescriptor pd = new PropertyDescriptor(propertyName, pt1.getClass());
        Method methodSetX = pd.getWriteMethod();
        methodSetX.invoke(pt1, value);
    }
}

 采用复杂的一种方式

private static Object getProperty(Object pt1, String propertyName) throws Exception{
//        PropertyDescriptor pd = new PropertyDescriptor(propertyName, pt1.getClass());
//        Method methodGetX = pd.getReadMethod();
//        Object retVal = methodGetX.invoke(pt1);

        //采用复杂的方式
        //把一个普通类当作javaBean来看待
        BeanInfo beanInfo = Introspector.getBeanInfo(pt1.getClass());
        PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
        Object retVal = null;
        for(PropertyDescriptor pd : propertyDescriptors){
            if(pd.getName().equals(propertyName)){
                Method readMethod = pd.getReadMethod();
                retVal = readMethod.invoke(pt1);
                break;
            }
        }
        return retVal;
    }

2.使用BeanUtils 工具包操作javaBean

/**
         * 使用BeanUtils
         * 设置属性和获取值使用的是字符串,1.自动完成类型的转换
         */
        System.out.println(BeanUtils.getProperty(pt1, "x").getClass().getName());
        BeanUtils.setProperty(pt1, "x", "9");
        System.out.println(pt1.getX());

        //2.支持属性的级联操作
        BeanUtils.setProperty(pt1, "birthday.time", "111");
        System.out.println(BeanUtils.getProperty(pt1, "birthday.time"));

查看帮助文档:/apache-commons/commons-beanutils-1.8.0-bin/commons-beanutils-1.8.0/apidocs/index.html

可以把一个对象的属性拷贝到另一个对象上去

 

static void    copyProperties(Object dest, Object orig)
          Copy property values from the origin bean to the destination bean for all cases where the property names are the same.

 可以把javaBean的属性转换为一个Map

static Map    describe(Object bean)
          Return the entire set of properties for which the specified bean provides a read method.

把Map填充到javaBean中去

static void    populate(Object bean, Map properties)
          Populate the JavaBeans properties of the specified bean, based on the specified name/value pairs

BeanUtils是以字符串的形式对javaBean进行操作,

PropertyUtils 是以bean本身的类型对javaBean进行操作

//使用PropertyUtils
        PropertyUtils.setProperty(pt1, "x", 9);
        System.out.println(PropertyUtils.getProperty(pt1, "x").getClass()
                .getName());
时间: 2024-08-28 15:20:01

java高新技术-操作javaBean的相关文章

黑马程序员——【Java高新技术】——JavaBean、注解

---------- android培训.java培训.期待与您交流! ---------- 一.JavaBean * 通过内省引入JavaBean:内省对应的英文全程是IntroSpector.在Java中,其作用主要针对JavaBean进行操作. (一)概述 (1)JavaBean是一种特殊的Java类,主要用于传递数据信息,这种Java类中的方法主要用于访问私有的字段,且方法符合某种特殊的命名规则. (2)如果要在两个模块之间传递多个信息,可以将这些信息封装到一个JavaBean中,这种J

JSP简单练习-EL表达式操作JavaBean

/* * javaBean代码 */ package bean; public class Box { double length; double width; double height; public Box() { length=0; width=0; height=0; } public double getLength() { return length; } public void setLength(double length) { this.length = length; }

使用内省的方式操作JavaBean

[java] view plain copy import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.Field; import java.lang.reflect.Method; /** * 使用内省的方式操作JavaBean */ public class IntroSpectorTest { publi

黑马程序员——java高新技术(新特性、反射、泛型)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- java高新技术 第一部分——JDK1.5新特性 1.增强for循环 格式: for(元素类型 变量名 : Collection集合 & 数组 ) { }//增强for循环括号里写两个参数,第一个是声明一个变量,第二个就是需要迭代的容器 高级for循环和传统for循环的区别: 高级for循环在使用时,必须要明确被遍历的目标.这个目标,可以是Collection集合或者数组,如果遍历Collec

内省操作javabean的属性

1 import java.beans.BeanInfo; 2 import java.beans.IntrospectionException; 3 import java.beans.Introspector; 4 import java.beans.PropertyDescriptor; 5 import java.lang.reflect.Method; 6 7 import org.junit.Test; 8 9 //使用内省api操作bean的属性 10 public class D

黑马程序员——Java高新技术——反射机制

点击打开链接 点击打开链接 点击打开链接 android培训.<a">点击打开链接 点击打开链接 java培训.期待与您交流!">点击打开链接 点击打开链接 反射的基石--Class类 Java程序中的各个java类属于同一类事物,描述这类事物的java类名就是Class. Class类没有构造函数,不能new对象.怎么得到Class类的实例,有3中方法: ①类名.Class    Class  c1=Date.class; ②对象.getClass 获取对象所属的字

Java API操作HDFS

HDFS是存储数据的分布式文件系统,对HDFS的操作,就是对文件系统的操作,除了用HDFS的shell命令对文件系统进行操作,我们也可以利用Java API对文件系统进行操作,比如文件的创建.删除.修改权限等等,还有文件夹的创建.删除.重命名等等. 使用Java API对文件系统进行操作主要涉及以下几个类: 1.Configuration类:该类的对象封装了客户端或者服务端的配置. 2.FileSystem类:该类的对象是一个文件系统对象,可以利用该对象的一些方法来对文件进行操作,FileSys

JAVA批处理操作

批处理,可以大幅度提升大量增.删.改的速度,就是对大数据操作有很大的效率提升. 与上篇文章中提到的"连接池"相似.其实就是先将多次操作(增删改)打包,然后再一次发送执行 主要用到两个方法: ?  打包:PreparedStatement.addBatch(); ?  发送.执行:PreparedStatement.executeBatch(); 下面看做同一件事,用批处理和不用批处理的效率对比,源码如下: import java.sql.Connection; import java.

黑马程序员——Java高新技术代理

代理 普通代理 很多时候,我们使用别人代码往往会发现别人代码的功能并不是十分符合我们的需求,调用别人的方法的时候,总是先new一个对象,然后我们的前处理做完,然后调用别人代码的方法,再加入后处理,这样做往往十分麻烦.代理就为其他类提供了一种控制其对象的方法.代理类和委托类必须实现同一个接口,这样代理类才能在需要的时候代替委托类对象,执行委托类的方法. interface Solution{ public void doSomething(); } //委托类Demo实现了接口 class Dem