深入解析Java开发中的BeanUtil工具类应用

更新:11-15 现代故事 我要投稿 纠错 投诉

大家好,今天小编来为大家解答深入解析Java开发中的BeanUtil工具类应用这个问题,很多人还不知道,现在让我们一起来看看吧!

1.commons-beanutils简介

commons-beanutils是Apache组织下的一个基础开源库。它为Java 反射和内省API 提供了包装器。它依赖于内省。其主要目的是利用反射机制来处理JavaBean的属性。我们知道,一个JavaBean通常包含大量的属性。很多时候,对JavaBean的处理导致积累了大量的get/set代码,增加了代码的长度和阅读代码的难度。现在有了BeanUtils,我们处理JavaBean 的属性就方便多了。

2.BeanUtils的使用

BeanUtils是commons-beanutils包下的一个工具类。如果要在我们的项目中使用这个类,需要导入以下两个jar包:

l commons-beanutils.jar

l commons-logging.jar

让我们练习一下如何使用BeanUtils。案例详情请参考BeanUtils用例详情。点击此处下载案例源码,如下:

(1)创建一个Web应用Example5,将上面提到的两个jar包复制到WEB-INF/lib下;

(2)在应用程序的src目录下新建一个Class类,命名为Person。主要代码如例1-1所示:

示例1-1 Person.java

公共类人{

私有字符串名称;

私有整数年龄;

私人字符串性别;

私有布尔布尔值;

以上四个属性的get/set方法这里不再赘述。

@覆盖

公共字符串toString() {

return "人[姓名="+姓名+",年龄="+年龄+",性别="+性别

+ "]";

}

}

在示例1-1 中,定义了四个成员变量并重写了toString() 方法。

(3)在src目录下新建Class类,命名为Demo,并在该类中定义单元测试方法。主要代码如例1-2所示:

示例1-2 Demo.java

公开课演示{

@测试

公共无效fun1()抛出异常{

String className="cn.itcast.domain.Person";

类clazz=Class.forName(className);

对象bean=clazz.newInstance();

BeanUtils.setProperty(bean, "名字", "张三");

BeanUtils.setProperty(bean, "年龄", "23");

BeanUtils.setProperty(bean, "性别", "男");

BeanUtils.setProperty(bean, "xxx", "XXX");

System.out.println(bean);

}

}

例1-2中,使用反射获取Person类的对象,然后使用BeanUtils类的静态方法setProperty(Object bean, String name, Object value)为Person类的指定属性赋值指定的豆。该方法的第一个参数是javaBean对象,第二个参数是javaBean属性,第三个参数是属性的值。

(4)运行Demo类的单元测试方法fun1(),控制台打印结果如图1-1所示:

图1-1 控制台打印结果

图1-1中,Person信息的打印格式是在Person类的toString()方法中设置的。

(5)使用BeanUtils的getProperty(Object bean, String name)方法获取指定bean的指定属性值,如例1-3所示:

公开课演示{

@测试

公共无效fun1()抛出异常{

String className="cn.itcast.domain.Person";

类clazz=Class.forName(className);

对象bean=clazz.newInstance();

BeanUtils.setProperty(bean, "名字", "张三");

BeanUtils.setProperty(bean, "年龄", "23");

BeanUtils.setProperty(bean, "性别", "男");

BeanUtils.setProperty(bean, "xxx", "XXX");

System.out.println(bean);

字符串年龄=BeanUtils.getProperty(bean, "age");

System.out.println(年龄);

}

}

(6)测试fun1方法,控制台打印结果如图1-2所示:

图1-2 控制台打印结果

以上是通过BeanUtils类的setProperty()和getProperty()方法设置和获取javaBean属性;在开发过程中,可能会有这样的需求:将表单提交的请求参数封装在一个javaBean中。这时候我们要用到BeanUtils 的setProperty() 和getProperty() 方法就会很麻烦;因此,BeanUtils为我们提供了一个静态方法populate(Object bean,Map properties),其中第二个参数是封装请求参数的Map。我们可以通过请求。 getParameterMap()方法获取封装了所有请求参数的Map对象。

我们通过一个例子来了解一下BeanUtils类的populate(Object bean,Map properties)方法,如下所示:

(7) 创建一个javaBean类User,如Example5所示。主要代码如例1-4所示:

示例1-4 User.java

公共类用户{

私有字符串用户名;

私有字符串密码;

这里省略了User类的成员变量的get/set方法。

@覆盖

公共字符串toString() {

return "用户[用户名="+用户名+",密码="+密码+"]";

}

}

(8) 在Demo类中定义另一个单元测试方法fun2。主要代码如例1-5所示:

示例1-5 fun2() 方法

@测试

公共无效fun2()抛出异常{

Mapmap=new HashMap();

map.put("用户名", "zhangSan");

map.put("密码", "123");

用户用户=新用户();

BeanUtils.populate(用户,地图);

System.out.println(用户);

}

在例1-5中,地图中的数据被封装到一个JavaBean中。这里有一个要求:Map中的key值必须与JavaBean中的属性名称一致,否则无法封装。

(9)测试fun2方法,控制台打印结果如图1-3所示:

图1-3 控制台打印结果

现在我们将BeanUtils封装成一个工具类。之前我们也封装过类似的工具类。该工具类提供了获取32位长度的不重复大写字符串的方法,如下所示:

(10) 在Example5中创建一个名为CommonUtils的工具类,并在该类中定义一个方法,将地图中的数据封装成javaBean。主要代码如例1-6所示:

示例1-6 CommonUtils.java

公共类CommonUtils {

/**

* 生成不重复的32位大写字符串

* @返回

*/

公共静态字符串uuid(){

return UUID.randomUUID().toString().replace("-","").toUpperCase();

}

/**

* 将map转换为指定类型的javaBean对象

* @参数映射

* @paramclazz

* @返回

*/

公共staticT toBean(Map map, Classclazz) {

尝试{

/*

* 1.创建指定类型的javabean对象

*/

T bean=clazz.newInstance();

/*

* 2.将数据封装成javabean

*/

BeanUtils.populate(bean, 地图);

/*

* 返回javabean对象

*/

返回豆;

} catch(异常e){

抛出新的运行时异常(e);

}

}

}

在示例1-6中,CommonUtils定义了一个静态泛型方法:toBean(Map map, Classclazz),该方法根据传递的参数确定使用哪个javaBean来封装map中的数据。通过反射获取指定类型的javaBean对象,然后调用BeanUtils类的populate()方法。

(11) 在Demo类中定义另一个单元测试方法fun3。主要代码如例1-7所示:

示例1-7 fun3() 方法

@测试

公共无效fun3(){

Mapmap=new HashMap();

map.put("用户名", "lisi");

map.put("密码", "123");

/*

* 请求.getParameterMap();

*/

用户user=CommonUtils.toBean(map, User.class);

System.out.println(用户);

}

例1-7中,使用CommonUtils类的toBean()方法将map中的数据封装成user,然后返回一个user对象。

(12)运行fun3()方法,控制台打印结果如图1-4所示:

用户评论

西瓜贩子

终于找到一篇介绍 BeanUtil 的文章了,之前一直在找!

    有18位网友表示赞同!

别留遗憾

BeanUtil 的工具功能看起来真的很强大,感觉学习一下会很实用。

    有15位网友表示赞同!

素衣青丝

我一直觉得 java 代码写转换属性的时候过于麻烦,BeanUtil 能解决这个问题吗?

    有6位网友表示赞同!

断桥残雪

看了标题感觉这个工具可以帮我们省很多时间,期待深入了解使用方法!

    有17位网友表示赞同!

顶个蘑菇闯天下i

之前在网上找到过 BeanUtil 的介绍,但没有时间去看。现在刚好想学习 Java 工具类,这篇文章正好合适!

    有14位网友表示赞同!

别伤我i

不知道 BeanUtil 对大规模项目的效率提升有多大影响?

    有10位网友表示赞同!

白恍

我已经开始尝试使用 BeanUtil 进行一些基础的属性转换,感觉还挺好用!

    有19位网友表示赞同!

此刻不是了i

对于初学者来说,BeanUtil 的学习难度怎么样?

    有11位网友表示赞同!

走过海棠暮

这篇文章能涵盖 BeanUtil 的各种常用功能吗?

    有18位网友表示赞同!

淡抹丶悲伤

还有哪些其他的 Java 工具类可以替代 BeanUtil 呢?

    有14位网友表示赞同!

发型不乱一切好办

我想知道 BeanUtil 适用于怎样的开发场景?比如 Web 开发?Spring 应用?

    有7位网友表示赞同!

初阳

BeanUtil 的性能怎么样?会不会影响代码运行速度?

    有10位网友表示赞同!

三年约

这篇文章会详细说明 BeanUtil 的 API 使用方法吗?

    有6位网友表示赞同!

ok绷遮不住我颓废的伤あ

看标题感觉可以用 BeanUtil 简化很多 Java 代码,很期待!

    有10位网友表示赞同!

弃我者亡

之前在项目中遇到过类似的属性转换问题,BeanUtil 能解决吗?

    有15位网友表示赞同!

涐们的幸福像流星丶

想了解一下 BeanUtil 的具体应用案例,看看它在实践中是如何使用的。

    有17位网友表示赞同!

不忘初心

对于不同类型的对象转换,BeanUtil 是否都有对应的方法支持?

    有9位网友表示赞同!

来自火星球的我

文章会提供 BeanUtil 下载和安装的步骤吗?

    有14位网友表示赞同!

苏莫晨

我想学习更多 Java 工具类,除了 BeanUtil,还有什么推荐?

    有16位网友表示赞同!

未来未必来

这篇文章能帮助我快速掌握 BeanUtil 的基本用法吗?

    有10位网友表示赞同!

【深入解析Java开发中的BeanUtil工具类应用】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活

上一篇:Navicat for MySQL下载安装与汉化教程:简单易用,数据库管理轻松上手! 下一篇:百e国际脂老虎科学减脂方案详解:专业技术助您健康瘦身