简介

BeanUtils工具包是由Apache公司所开发,提供对Java反射和自省API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理。

我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处理导致大量get/set代码堆积,增加了代码长度和阅读代码的难度。

如果我们使用BeanUtils工具包就可以很方便的对JavaBean类能够进行简便的操作。

使用与依赖包:commons-beanutils-1.9.3.jar ;commons-logging-1.2.jar

BeanUtils工具对JavaBean类的操作:

① BeanUtils 可以便于对javaBean的属性进行赋值。

② BeanUtils 可以便于对javaBean的对象进行赋值。

③ BeanUtils 可以将一个MAP集合的数据拷贝到一个javabean对象中。

BeanUtils常用方法:

方法名 返回值 说明
copyProperties(Object dest,Object orig) void 把orig中的值copy到dest中
describe(Object bean) Map 把Bean的属性值放入一个Map里面
populate(Object bean,Map properties) void 把properties里面的值放如bean中
setProperty(Object bean,String name,Object value) void 设置bean对象的名称为name的property的值为value
getProperty(Object bean,String name) String  取得bean对象中名为name的属性的值

BeanUtils的使用:

约定前提:参数名称必须要和JavaBean的属性名称保持一致。

 public class User {

     private int id;
private String username;
private String email;
private String password;
private String name;
private String phone;
private String address; public User() {
super();
} public User(String username, String email, String password, String name, String phone, String address) {
super();
this.username = username;
this.email = email;
this.password = password;
this.name = name;
this.phone = phone;
this.address = address;
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getEmail() {
return email;
} public void setEmail(String email) {
this.email = email;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getPhone() {
return phone;
} public void setPhone(String phone) {
this.phone = phone;
} public String getAddress() {
return address;
} public void setAddress(String address) {
this.address = address;
} @Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", email=" + email + ", password=" + password + ", name="
+ name + ", phone=" + phone + ", address=" + address + "]";
} }

JavaBean Code

例如:用户注册,服务器端获取浏览器端提交的注册表单数据,然后将用户输入的注册信息持久化到数据库中。

浏览器端:表单中<input type="text" name="username">的name属性必须与JavaBean类的属性名一致。

         <form action="${pageContext.request.contextPath }/user_register"
method="post">
<div class="register-top-grid">
<h3>注册新用户</h3>
<div class="input">
<span>用户名 <label style="color: red;">*</label></span>
<input type="text" name="username" placeholder="请输入用户名" required="required">
</div>
<div class="input">
<span>邮箱 <label style="color: red;">*</label></span>
<input type="text" name="email" placeholder="请输入邮箱" required="required">
</div>
<div class="input">
<span>密码 <label style="color: red;">*</label></span>
<input type="text" name="password" placeholder="请输入密码" required="required">
</div>
<div class="input">
<span>收货人<label></label></span>
<input type="text" name="name" placeholder="请输入收货">
</div>
<div class="input">
<span>收货电话<label></label></span>
<input type="text" name="phone" placeholder="请输入收货电话">
</div>
<div class="input">
<span>收货地址<label></label></span>
<input type="text" name="address" placeholder="请输入收货地址">
</div>
<div class="clearfix"></div>
</div>
<div class="register-but text-center">
<input type="submit" value="提交">
<div class="clearfix"></div>
</div>
</form>

HTML Code

服务器端:在不使用BeanUtils的情况下获取数据,每一条数据都进行获取并对每个属性逐个赋值;

通过这样的方法如果表单属性字段很多,达到了100、1000甚至更多,那我们不是要写100、1000行重复的代码了吗。谁都不愿意这样做。

     protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { // 构建User对象
User user = new User(); // 获取请求中表单提交的数据
String username = request.getParameter("username");
String email = request.getParameter("email");
String password = request.getParameter("password");
String name = request.getParameter("name");
String phone = request.getParameter("phone");
String address = request.getParameter("address"); // 把获取到的数据赋值到user对象中
user.setUsername(username);
user.setEmail(email);
user.setPassword(password);
user.setName(name);
user.setPhone(phone);
user.setAddress(address); // 将user对象持久化到数据库中
uService.register(username);
request.setAttribute("msg", "注册成功,请登录");
request.getRequestDispatcher("/user_login.jsp").forward(request, response);
}

而我们使用 BeanUtils.copyProperties() 方法以后,代码量大大的减少,而且整体程序看着也简洁明朗,代码如下:

     protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { // 构建User对象
User user = new User(); try {
// 获取表单请求中的Map集合,将集合中的数据copy到user对象中;所提交请求中的请求参数和请求参数值的映射关系。
BeanUtils.copyProperties(user, request.getParameterMap());
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} // 将user对象持久化到数据库中
uService.register(user);
request.setAttribute("msg", "注册成功,请登录");
request.getRequestDispatcher("/user_login.jsp").forward(request, response); }

注:如果User和表单之间存在名称不相同的属性,则BeanUtils不对这些属性进行处理。

Commons BeanUtils工具包的更多相关文章

  1. 内省、JavaBean、PropertyDescriptor类、Introspector类、BeanUtils工具包、注解、Rentention、Target、注解的基本属性和高级属性

      本文转载自:http://blog.sina.com.cn/s/blog_5d65a16901011kom.html 关键字:内省.JavaBean.PropertyDescriptor类.Int ...

  2. 32_使用BeanUtils工具包操作JavaBean

      由于对属性设置值和得到值的需求很多,使用频率很高,所以有一些开源勇士 不满足于JavaBean API 中IntroSpector来操作bean, 写出来了通用的BeanUtils工具,来进一步简 ...

  3. JavaWeb -- 内省—beanutils工具包 的使用

    Apache组织开发了一套用于操作JavaBean的API,这套API考虑到了很多实际开发中的应用场景,因此在实际开发中很多程序员使用这套API操作JavaBean,以简化程序代码的编写. Beanu ...

  4. java 内省综合案例和Beanutils工具包

    演示用eclipse自动生成 ReflectPoint类的setter和getter方法. 直接new一个PropertyDescriptor对象的方式来让大家了解JavaBean API的价值,先用 ...

  5. Apache Commons BeanUtils

    http://commons.apache.org/proper/commons-beanutils/javadocs/v1.9.2/apidocs/org/apache/commons/beanut ...

  6. myeclipse的项目导入到eclipse下,com.sun.org.apache.commons.beanutils.BeanUtils不能导入

    com.sun.org.apache.commons.beanutils.BeanUtils这个包不能引入了怎么办自己下了个org.apache.commons的jar包了之后,改成import or ...

  7. 关闭log4j 输出 DEBUG org.apache.commons.beanutils.*

    2016-03-23 10:52:26,860 DEBUG org.apache.commons.beanutils.MethodUtils - Matching name=getEPort on c ...

  8. Apache Commons Beanutils对象属性批量复制(pseudo-singleton)

    Apache Commons Beanutils为开源软件,可在Apache官网http://commons.apache.org/proper/commons-beanutils/download_ ...

  9. Commons Beanutils使用setProperty() - 就是爱Java

    有时不能只依靠getter/setter操作bean,如:需要名字动态取得的,或是访问bean内的field,甚至是集合或数组内bean的field,利用反射机制对bean的field进行处理,这时候 ...

随机推荐

  1. JS 拷贝传值和引用传值

    1.拷贝传值:基本数据类型都是“拷贝传值”. 拷贝传值,就是将一个变量的值“拷贝”一份,传给了另一个变量. 拷贝传值中,两个变量之间没有任何联系,修改其中一个变量的值,另一个不会改变. 这两个变量之间 ...

  2. zepto问题

    jq功能对照表 http://jsrun.it/21f/mrCH 不支持 jquery的 ajaxSetup 全局修改ajax的设置 $.ajaxSetup({beforeSend : beforeS ...

  3. spring mvc文件上传报错:Expected MultipartHttpServletRequest: is a MultipartResolver configured?

    报错原因:spring-mvc.xml 的配置文件中,配置文件上传id不为 “multipartResolver” 解决:id 改为 “multipartResolver”

  4. 语音识别(语音转文字)&& 语音合成(文字转语音)

    [语音合成API]SpeechSynthesisUtterance是HTML5中新增的API,用于将指定文字合成为对应的语音.也包含一些配置项,指定如何去阅读(语言,音量,音调)等 // 语音播报 s ...

  5. wpf 定时器应用,在界面动态刷新时间

    DispatcherTimer = new DispatcherTimer(); Timer.Tick += Timer_Tick; Timer.Interval = TimeSpan.FromSec ...

  6. Linux 下 cs8900a 的移植说明

    为 cs8900a 建立编译菜单 1. 拷贝到文件 把 cs8900a 的压缩包拷贝到 arm 用户下的 dev_home/localapps/ [arm@localhost localapps]$ ...

  7. 7款外观迷人的HTML5/CSS3 3D特效按钮特效

    下面我整理了7款外观都十分迷人的HTML5/CSS3 3D按钮特效,有几个还挺实用的,分享给大家. 1.CSS3超酷3D弹性按钮 按钮实现非常简单 之前我们分享过几款不错的CSS3 3D立体按钮,比如 ...

  8. Nginx在windows系统的常用命令

    启动 start nginx 强制停止 nginx.exe -s stop 重启 nginx.exe -s reload

  9. 二分图——poj2446匈牙利算法

    /* 怎么建图: 首先分集合:不能相连的点必然在一个集合里,即对角点 再确定怎么连边: 一个点可以向上下左右连边,如果遇到了洞则不行 dfs(i),让匹配到的点接受i作为match结果 寻找增广路时, ...

  10. AtCoder F - Exhausted?

    传送门 sxy题解: //Achen #include<algorithm> #include<iostream> #include<cstring> #inclu ...