博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
32_使用BeanUtils工具包操作JavaBean
阅读量:5925 次
发布时间:2019-06-19

本文共 3633 字,大约阅读时间需要 12 分钟。

 

由于对属性设置值和得到值的需求很多,使用频率很高,所以有一些开源勇士 不满足于JavaBean API 中IntroSpector来操作bean,

写出来了通用的BeanUtils工具,来进一步简化对java bean的操作,并开源放在apache网站上提供免费下载。

 

Beanutils工具包

  • 演示用eclipse如何加入jar包,先只是引入beanutils包,等程序运行出错后再引入logging包。
1 commons-beanutils-1.9.2-bin.zip 
2 commons-beanutils-1.9.2-src.zip 
3 commons-logging-1.1.3-bin.zip  
4 commons-logging-1.1.3-src.zip  

 

java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory 缺少logging的jar包

这个日志包,很多框架都在用。

  • 在前面内省例子的基础上,用BeanUtils类先get原来设置好的属性,再将其set为一个新值。
    • get属性时返回的结果为字符串,set属性时可以接受任意类型的对象,通常使用字符串。

                  这非常适合浏览器传过来的字符串对对象进行set。

  • 用PropertyUtils类先get原来设置好的属性,再将其set为一个新值。
    • get属性时返回的结果为该属性本来的类型,set属性时只接受该属性本来的类型。

java bean

package com.itcast.day1;import java.util.Date;public class ReflectPoint {    private Date birthday=new Date();        private int x;    public int y;    public ReflectPoint(int x, int y) {        super();        this.x = x;        this.y = y;    }    @Override    public int hashCode() {        final int prime = 31;        int result = 1;        result = prime * result + x;        result = prime * result + y;        return result;    }    @Override    public boolean equals(Object obj) {        if (this == obj)            return true;        if (obj == null)            return false;        if (getClass() != obj.getClass())            return false;        ReflectPoint other = (ReflectPoint) obj;        if (x != other.x)            return false;        if (y != other.y)            return false;        return true;    }    public int getX() {        return x;    }    public void setX(int x) {        this.x = x;    }    public int getY() {        return y;    }    public void setY(int y) {        this.y = y;    }    public Date getBirthday() {        return birthday;    }    public void setBirthday(Date birthday) {        this.birthday = birthday;    }    @Override    public String toString() {        return "ReflectPoint [birthday=" + birthday + ", x=" + x + ", y=" + y                + "]";    }    }

测试类:

package com.itcast.day2;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 java.util.HashMap;import java.util.Map;import org.apache.commons.beanutils.BeanUtils;import org.apache.commons.beanutils.PropertyUtils;import com.itcast.day1.ReflectPoint;public class IntroSpectorTest {    public static void main(String[] args) throws Exception{                ReflectPoint rf1=new ReflectPoint(3,4);                    Object value=6;        System.out.println(BeanUtils.getProperty(rf1, "x").getClass().getName());// x是int,但是用beanutils设值时为        System.out.println(rf1.getX());        BeanUtils.setProperty(rf1, "x",1); //原来类型 设值         BeanUtils.(rf1, "x","2"); //支持String类型 设值         System.out.println(rf1.getX());                BeanUtils.setProperty(rf1, "birthday.time", "111");//支持属性级联操作         System.out.println(BeanUtils.(rf1, "birthday.time").getClass().getName());//java.lang.String 111        Map mm=BeanUtils.(rf1);//javabean转成map        System.out.println(rf1);//ReflectPoint [birthday=Thu Jan 01 08:00:00 GMT+08:00 1970, x=2, y=4]                Map map=new HashMap();        map.put("x", 1);        map.put("y",1);        BeanUtils.(rf1, map);//把map转换成javabean         System.out.println(rf1);//ReflectPoint [birthday=Thu Jan 01 08:00:00 GMT+08:00 1970, x=1, y=1]                //PropertyUtils.setProperty(rf1, "x", "9");//运行出错!因为PropertyUtils只支持原来的类型,这点没有BeanUtils强大!         PropertyUtils.setProperty(rf1, "x", 9);        System.out.println(rf1.getX());//9    }}
开始做,坚持做,重复做

转载地址:http://lbovx.baihongyu.com/

你可能感兴趣的文章
Android 在Activity中对SQLite的操作
查看>>
ZERO 笔试
查看>>
价值百万的企业大数据分析报告是如何炼成的?
查看>>
Restful架构
查看>>
机器学习算法学习---处理聚类问题常用算法(二)
查看>>
3n+1
查看>>
递归与内置函数
查看>>
UIView和layer的区别
查看>>
.NET 浅谈EXCEL上传
查看>>
Android 自定义view中的属性,命名空间,以及tools标签
查看>>
extjs中使用ItemSelector 控件(从左边选到右边)
查看>>
SpringBoot中遇到的一些问题
查看>>
java中的奇葩 “:”
查看>>
技术笔记:XMPP之openfire+spark+smack
查看>>
同引擎mysql数据库转导快
查看>>
@RequestMapping
查看>>
P1434 滑雪(记忆化搜索)
查看>>
vue父组件给子传参
查看>>
华为18.9.5校招笔试题AK
查看>>
iOS不得姐项目--appearance的妙用,再一次设置导航栏返回按钮,导航栏左右按钮的封装(巧用分类)...
查看>>