Sun公司的内省API过于繁琐,所以Apache组织结合很多实际开发中的应用场景开发了一套简单、易用的API操作Bean的属性——BeanUtils
Beanutils工具包的常用类:
•BeanUtils
•PropertyUtils
•ConvertUtils.regsiter(Converter convert, Class clazz)
•自定义转换器
 
首先我们需要导入两个Jar包
 
package com.cn.gbx;

import java.util.Date;

public class Person {

	private String name;
private String password;
private int age;
private Date date = null; public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
} @Override
public String toString() {
return name + " " + password + " " + age + " " + date.toLocaleString();
}
}

  

package com.cn.gbx;

import java.lang.reflect.InvocationTargetException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map; import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConversionException;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter;
import org.apache.commons.beanutils.locale.converters.DateLocaleConverter;
import org.junit.Test; public class BeanUtilsDemo {
@Test
public void test1() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
Person p = new Person();
BeanUtils.setProperty(p, "name", "gbx");
System.out.println(p.getName()); String name = null;
BeanUtils.getMappedProperty("name", name);
System.out.println(name);
} @Test
public void test2() throws IllegalAccessException, InvocationTargetException { //为BeanUtils 注册转自己的换器 String to Date
ConvertUtils.register(new Converter() {
@Override
public Object convert(Class type, Object value) {
if (value == null) {
return null;
}
if (!(value instanceof String)) {
throw new ConversionException("只支持String的转换");
}
String str = (String) value;
if ("".equals(str.trim())) {
return null;
}
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
date = sf.parse(str);
} catch (ParseException e) {
throw new RuntimeException(e); //异常连不可断
}
return date;
}
},
Date.class); String name = "gbx";
String age = "23";
String password = "123";
String birth = "1990-11-14"; Person p = new Person();
BeanUtils.setProperty(p, "name", name);
BeanUtils.setProperty(p, "age", age); // BeanUtils自动帮我们完成了转换, 自动的只支持八中基本数据类型
BeanUtils.setProperty(p, "password", password); //非八种基本数据类型 我们需要注册自己的转换器
BeanUtils.setProperty(p, "date", birth); System.out.println(p);
} @Test
public void test3() throws IllegalAccessException, InvocationTargetException {
String name = "gbx";
String age = "23";
String password = "123";
String birth = "1990-11-14"; //注册系统为我们提供的转换器
ConvertUtils.register(new DateLocaleConverter(), Date.class); Person p = new Person();
BeanUtils.setProperty(p, "name", name);
BeanUtils.setProperty(p, "age", age); // BeanUtils自动帮我们完成了转换, 自动的只支持八中基本数据类型
BeanUtils.setProperty(p, "password", password); BeanUtils.setProperty(p, "date", birth); System.out.println(p);
} //这样可以直接把表单提交 request交给对象了
@Test
public void test4() throws IllegalAccessException, InvocationTargetException {
ConvertUtils.register(new DateLocaleConverter(), Date.class);
Person p = new Person();
Map<String, String> info = new HashMap<String, String>();
info.put("name", "gbx");
info.put("age","23");
info.put("password","123");
info.put("date", "1990-11-14"); BeanUtils.populate(p, info); // 。。。
System.out.println(info);
} }

  

BeanUtils框架的简单运用的更多相关文章

  1. 基于ThinkPHP框架的简单的后台管理系统

    版权声明:本文为博主原创文章,未经博主允许不得转载. 基于ThinkPHP框架的简单的后台管理系统 一个简单的后台管理系统,可能还不全面,可以自己改,有登录功能 实例如图:    

  2. PHP ORM框架与简单代码实现(转)

    对象关系映射(Object Relational Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据 ...

  3. BeanUtils框架浅析

    一.使用步骤: 1.添加jar包: commons-beanutils-1.8.0.jar commons-logging.jar 2.使用setProperty()方法对javabean设置属性值 ...

  4. 初识服务发现及Consul框架的简单使用

    初识服务发现及Consul框架的简单使用   1.什么是服务发现? 服务发现组件记录了(大规模)分布式系统中所有服务的信息,人们或者其它服务可以据此找到这些服务. DNS 就是一个简单的例子. 当然, ...

  5. truffle框架的简单使用

    truffle 给大家介绍一下这个框架怎么使用,其实把这个框架就是你们看我之前有一个教程是教你们怎么用remix-ide来连接私有链,编译,配置合约,然后进行调用的,truffle其实就是把这个步骤放 ...

  6. python操作三大主流数据库(12)python操作redis的api框架redis-py简单使用

    python操作三大主流数据库(12)python操作redis的api框架redis-py简单使用 redispy安装安装及简单使用:https://github.com/andymccurdy/r ...

  7. 框架Thinkphp5 简单的实现行为 钩子 Hook

    这篇文章主要介绍了关于框架Thinkphp5 简单的实现行为 钩子 Hook,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 实现在一个方法开始和结束加入两个行为:api_init.ap ...

  8. Net系列框架-Dapper+简单三层架构

    Net系列框架-Dapper+简单三层架构 工作将近6年多了,工作中也陆陆续续学习和搭建了不少的框架,后续将按由浅入深的方式,整理出一些框架源码,所有框架源码本人都亲自调试通过,如果有问题,欢迎联系我 ...

  9. SpringMVC笔记——SSM框架搭建简单实例

    落叶枫桥 博客园 首页 新随笔 联系 订阅 管理 SpringMVC笔记——SSM框架搭建简单实例 简介 Spring+SpringMVC+MyBatis框架(SSM)是比较热门的中小型企业级项目开发 ...

随机推荐

  1. #import vs. @class

    You #import or #include when there is a physical dependency. Otherwise, you use forward declarations ...

  2. Oracle 单行函数

    一.什么是函数 任何东西,只要它能接收输入,对输入进行加工并产生输出,它就可以被称为函数. 二.单行函数简介 单行函数只对表中的一行数据进行操作,并且对每一行数据只产生一个输出结果.单行函数可以接受一 ...

  3. JavaScript的一些基本语句代码如下!!!!

    <html><body> <script type="text/javascript">document.write("<h1& ...

  4. java 堆栈 静态

    所以静态变量和非静态变量的区别就在于静态变量可以用来计数,而非静态变量则不行. 理解了内存,就理解了一切,就理解了各种各样的语言.所有的语言无非都是这样:局部变量分配内存永远在栈里面,new出来的东西 ...

  5. [HTML]JS添加表格

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. [ios][opengles]opengles纹理贴图

    参考:http://www.cnblogs.com/andyque/archive/2011/09/02/2155061.html

  7. js命名空间笔记

    在量比较大或者多人编写的情况下,命名冲突就很有可能发生,同一个页面引用了两个命名相同功能不同的文件,调用的时候就会出问题.因此使用JS命名空间很重要. 1.采用字面量方法创建命名空间: var a={ ...

  8. rtc关机闹钟4 AlarmManagerService.java

    vim base/services/core/java/com/android/server/AlarmManagerService.java AlarmManager 调用 IAlarmManage ...

  9. JS获取非行间样式

    我们都知道用offset函数获取元素样式是一件很方便的事,但是offset只能获取行间样式,而无法获得非行间样式,这是它的瓶颈所在. 我们都知道js获取行间样式的方法,那么js是如何获取行距样式的呢? ...

  10. Android invalidate() 和 postInvalidate()的区别

    Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中 ...