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());

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

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

    ---------- android培训.java培训.期待与您交流! ---------- 一.JavaBean * 通过内省引入JavaBean:内省对应的英文全程是IntroSpector.在J ...

  2. Java高新技术 JavaBean内省

     Java高新技术  JavaBean内省 知识概要:                 (1)了解JavaBean内省                 (2)JavaBean的简单内省操作     ...

  3. 黑马程序员_高新技术之javaBean,注解,类加载器

    ----------- android培训.java培训.java学习型技术博客.期待与您交流! ---------- 第一部分 javaBean 一,由内省引出javaBean 1,内省: 内省对应 ...

  4. 黑马程序员:Java基础总结----JavaBean 内省

    黑马程序员:Java基础总结 JavaBean 内省   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! JavaBean  内省 软件包 java.beans 包含与开 ...

  5. Java高新技术 JDK1.5之新特性

      Java高新技术  JDK1.5的新特性 知识概要:                 (1)静态导入 (2)可变参数 (3)增强for循环 (4)基本数据类型的自动拆箱和装箱 静态导入     ...

  6. 使用内省的方式操作JavaBean

    import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; im ...

  7. MongoDB学习-->命令行增删改查&JAVA驱动操作Mongodb

    MongoDB 是一个基于分布式文件存储的数据库. 由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关 ...

  8. java 内省 了解JavaBean

    JavaBean是一种特殊的Java类,主要用于传递数据信息,这种java类中的方法主要用于访问私有的字段,且方法名符合某种命名规则. 如果要在两个模块之间传递多个信息,可以将这些信息封装到一个Jav ...

  9. 内省机制(操作javaBean的信息)

    内省机制(操作javaBean的信息) ----是不是联想到了反射机制了哈,这两者有什么区别呢? 1.内省机制和反射机制的联系 ■ 其实内省机制也是通过反射来实现的,而反射是对一切类都适合去动态获取类 ...

随机推荐

  1. iOS 直播-闪光灯的使用

    iOS 直播-闪光灯的使用 应用场景是这样的,最近公司决定做一款直播类的软件. 在开发中就遇到了不曾使用过的硬件功能-闪光灯. 这篇博客将简单介绍一下闪光灯的使用. // // ViewControl ...

  2. 安卓学习----使用okHttp(POST方式)---登录

    工具类 package com.liunan.okhttpdemo3post.Utils; import java.io.IOException; import okhttp3.MediaType; ...

  3. 利用split

    java.lang.string.splitsplit 方法将一个字符串分割为子字符串,然后将结果作为字符串数组返回.stringObj.split([separator,[limit]])strin ...

  4. IOS 多线程分类以及多线程的相关操作

    直接附上援助链接:http://www.cnblogs.com/kenshincui/p/3983982.html 分享内容还关联到了生产者与消费者模式(其实看明白了整片文章,也就理解了生产者与消费者 ...

  5. python数据库操作对主机批量管理

    import paramiko import MySQLdb conn = MySQLdb.connect(host=',db='host') cur = conn.cursor(cursorclas ...

  6. Linux的主机规划和磁盘分区

    选择与Linux搭配的主机配置 CPU  只要不是老旧到让你的硬件系统死机的都能够支持 RAM 内存越大越好,内存的重要性要比CPU还要高,至少512MB Hard Disk 由于数据量与数据的访问频 ...

  7. Linux驱动开发概述

    原文出处:http://www.cnblogs.com/jacklu/p/4722563.html Linux设备分类 设备的驱动程序也要像裸机程序那样进行一些硬件操作,不同的是驱动程序需要" ...

  8. makefile之变量赋值

    makefile中变量赋值有4种方法: = ,   := ,  += ,  ?= = :直接赋值 变量 = 值 :=   :位置相关赋值 如果右值为一个值,那么它和=没区别,如果右值为变量,那么左边变 ...

  9. hadoop.home.dir is not set

    今天遇到一个错误,JAVA堆栈如下: 是在获取文件系统对象的时候出错,没有找到环境变量 HADOOP_HOME or hadoop.home.dir ,但是在本地一直没有重现这个问题. 这个问题是一个 ...

  10. Linux配置本地无密码访问

    本机配置无密码访问基本操作步骤: 1.ssh-keygen (效果同ssh-keygen -t rsa 一样,也可以ssh-keygen -t dsa) 2.ssh-copy-id -i ~/.ssh ...