文档章节

Apache开源库BeanUtils操作JavaBean的属性

AAASSSSddd
 AAASSSSddd
发布于 2016/03/29 22:53
字数 439
阅读 149
收藏 3

一、Apache BeanUtils介绍

    导入BeanUtils jar 和 commons-logging日志jar

二、BeanUtils代码操作

package com.java.a.introspector;

import java.util.Date;

public class Student {

	private String name;
	private int luckyNum;
	private Date birthday;
	
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getLuckyNum() {
		return luckyNum;
	}
	public void setLuckyNum(int luckyNum) {
		this.luckyNum = luckyNum;
	}
}

package com.java.a.introspector;

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.junit.Test;

/**
 * @author TS
 */
public class IBeanUtils {

	/**
	 * 通过BeanUtils设置Bean属性
	 * @throws Exception
	 */
	@Test
	public void test() throws Exception{

		Student s = new Student();
		//设置属性
		BeanUtils.setProperty(s, "name", "zhangsan");

		System.out.println(s.getName());
	}

	/**
	 * 通过BeanUtils设置Bean属性2
	 * @throws Exception
	 */
	@Test
	public void test2() throws Exception{

		//模拟web客户端传入后台的数据
		String name = "zhangsan";
		String luckyNum = "47";
		String birthday = "1993-05-12";

		//BeanUtils直接封装属性(只支持8种基本数据类型)
		//日期类型要自定义日期转换器进行操作
		ConvertUtils.register(new DateConverter(), Date.class);

		Student s = new Student();
		BeanUtils.setProperty(s, "name", name);
		BeanUtils.setProperty(s, "luckyNum", luckyNum);
		BeanUtils.setProperty(s, "birthday", birthday);

		System.out.println(s.getName());
		System.out.println(s.getLuckyNum());
		//警告:DateConverter does not support default String to 'Date' conversion.
		System.out.println(s.getBirthday());
	}


	/**
	 * BeanUtils高级用法
	 * @throws Exception
	 */
	@Test
	public void test3() throws Exception{
		//模拟web客户端传入后台的数据,Map封装
		Map<String,String> properties = new HashMap<>();
		properties.put("name", "zhangsan");
		properties.put("luckyNum", "47");
		properties.put("birthday", "1993-05-12");
		
		ConvertUtils.register(new DateConverter(), Date.class);
		
		Student bean = new Student();
		BeanUtils.populate(bean, properties);

		System.out.println(bean.getName());
		System.out.println(bean.getLuckyNum());
		System.out.println(bean.getBirthday());
	}
}

/**
 * 自定义BeanUtils日期转换器
 * @author TS
 *
 */
class DateConverter implements Converter{

	/**
	 * type是BeanUtils通过实例对象获取getClass对象来自动传入的
	 */
	@Override
	public Object convert(Class type, Object value) {

		if( value == null ){
			return null;
		}

		if(!(value instanceof String) ){
			throw new ConversionException("只支持String类型对日期的转换!");
		}

		String source = (String)value;

		if( source.trim().equals("") ){
			return null;
		}

		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

		try {
			Date date = sdf.parse(source);
			return date;

		} catch (ParseException e) {

			throw new RuntimeException(e);
		}
	}
}


© 著作权归作者所有

AAASSSSddd
粉丝 19
博文 51
码字总数 48587
作品 0
杭州
程序员
私信 提问
Java内省(Introspector)

Java内省(Introspector) Java内省技术专门用来操作JavaBean的属性。 为什么要学内省? 开发框架时,经常需要使用java对象的属性来封装程序的数据,每次都使用反射技术完成此类操作过于麻烦...

_-Leon-_
2014/07/14
265
0
BeanUtils.copyProperties与PropertyUtils.copyProperties用法及区别

一、简介: BeanUtils提供对Java反射和自省API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理。我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处理导致...

伍咖
2015/04/20
820
0
BeanUtils.copyProperties与PropertyUtils.copyPropert

BeanUtils.copyProperties与PropertyUtils.copyProperties用法及区别 一、简介: BeanUtils提供对Java反射和自省API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理。我们知道,一...

赵小宾
2014/03/26
153
0
关于BeanUtils.copyProperties的用法和优缺点

一、简介:   BeanUtils提供对Java反射和自省API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理。我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处理导...

码代码的小司机
2018/11/05
70
0
Commons BeanUtils 1.9.2 发布

Commons BeanUtils 1.9.2 发布,commons-beanutils 是apache commons子项目中的一个软件包,其主要目的是利用反射机制对JavaBean的属性进行处理。 这是一个维护版本,改进如下:...

红薯
2014/06/03
2.9K
2

没有更多内容

加载失败,请刷新页面

加载更多

如何有效地计算JavaScript中对象的键/属性数量?

计算对象的键/属性数的最快方法是什么? 是否可以在不迭代对象的情况下执行此操作? 即不做 var count = 0;for (k in myobj) if (myobj.hasOwnProperty(k)) count++; (Firefox确实提供了一...

技术盛宴
19分钟前
2
0
百度网址安全中心拦截解除的办法分享

临近2019年底,客户的公司网站被百度网址安全中心拦截了,公司网站彻底打不开了,影响范围很大,于是通过朋友介绍找到我们SINE安全公司寻求帮忙解封,关于如何解除百度的安全拦截提示,下面就...

网站安全
30分钟前
3
0
Tomcat8源码分析-启动流程-start方法

上一篇:Tomcat8源码分析-启动流程-load方法 前面讲了启动流程中的Catalina.load,进一步调用绝大部分组建的init操作,主要完成对server.xml解析,并根据解析的结果结合设置的Rule(规则)构造...

特拉仔
39分钟前
6
0
Xamarin.FormsShell基础教程(7)Shell项目关于页面的介绍

Xamarin.FormsShell基础教程(7)Shell项目关于页面的介绍 轻拍标签栏中的About标签,进入关于页面,如图1.8和图1.9所示。它是对应用程序介绍的页面。 该页面源自Views文件夹中的AboutPage.x...

大学霸
45分钟前
3
0
一步一步理解Impala query profile(一)

很多Impala用户不知道如何阅读Impala query profile来了解一个查询背后正在执行的操作,从而在此基础上对查询进行调优以充分发挥查询的性能。因此我想写一篇简单的文章来分享我的经验,并希望...

九州暮云
46分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部