java bean 工具类_JavaBean工具类

工具类commons-beanutils介绍

对象结构图如下:

a4c26d1e5885305701be709a3d33442f.png

常用工具类介绍:

ContextClassLoaderLocal:使用当前线程的ClassLoader作为key,为同一个ClassLoader内的多线程共享对象(一般是指同一个容器内)而提供的工具类;

BeanUtils、BeanUtilsBean:提供对标准JavaBean和动态bean的操作;主要功能是复制bean中的内容,拷贝bean,为bean中的内容赋值和读取bean中内容;调用bean的setter方法会先做类型转换;BeanUtils与BeanUtilsBean的关系,类似于外套与内衣的关系;

ConvertUtils、ConvertUtilsBean:类型转换工具类;

PropertyUtils、PropertyUtilsBean:属性操作工具类;调用bean的setter方法不会做类型转换;

MethodUtils:方法工具类;

ConstructorUtils:构造函数工具类;

LocaleBeanUtils、LocaleBeanUtilsBean:和BeanUtils作用类似,但在执行相应方法时可以进行地区敏感数据的转换;

建议:还有一个基础库commons-lang必不可少,可以结合使用;

类型转换工具ConvertUtilsBean注册的类型如下://

默认注册类型

public void deregister() {

converters.clear();

registerPrimitives(false);

registerStandard(false, false);

registerOther(true);

registerArrays(false, 0);

register(BigDecimal.class, new

BigDecimalConverter());

register(BigInteger.class, new

BigIntegerConverter());

}

// 基础类型

private void registerPrimitives(boolean throwException) {

register(Boolean.TYPE, throwException ? new

BooleanConverter() : new BooleanConverter(Boolean.FALSE));

register(Byte.TYPE, throwException ? new

ByteConverter() : new ByteConverter(ZERO));

register(Character.TYPE, throwException ? new

CharacterConverter() : new

CharacterConverter(SPACE));

register(Double.TYPE, throwException ? new

DoubleConverter() : new DoubleConverter(ZERO));

register(Float.TYPE, throwException ? new

FloatConverter() : new FloatConverter(ZERO));

register(Integer.TYPE, throwException ? new

IntegerConverter() : new IntegerConverter(ZERO));

register(Long.TYPE, throwException ? new

LongConverter() : new LongConverter(ZERO));

register(Short.TYPE, throwException ? new

ShortConverter() : new ShortConverter(ZERO));

}

// 标准类型

private void registerStandard(boolean throwException, boolean

defaultNull) {

Number defaultNumber = defaultNull ? null : ZERO;

BigDecimal

bigDecDeflt = defaultNull ? null : new BigDecimal("0.0");

BigInteger

bigIntDeflt = defaultNull ? null : new BigInteger("0");

Boolean booleanDefault = defaultNull ? null : Boolean.FALSE;

Character charDefault = defaultNull ? null : SPACE;

String stringDefault = defaultNull ? null : "";

register(BigDecimal.class, throwException ?

new BigDecimalConverter() : new

BigDecimalConverter(bigDecDeflt));

register(BigInteger.class, throwException ? new

BigIntegerConverter() : new

BigIntegerConverter(bigIntDeflt));

register(Boolean.class, throwException ? new

BooleanConverter() : new BooleanConverter(booleanDefault));

register(Byte.class, throwException ? new

ByteConverter() : new ByteConverter(defaultNumber));

register(Character.class, throwException ? new CharacterConverter() : new

CharacterConverter(charDefault));

register(Double.class, throwException ? new

DoubleConverter() : new DoubleConverter(defaultNumber));

register(Float.class, throwException ? new

FloatConverter() : new FloatConverter(defaultNumber));

register(Integer.class, throwException ? new

IntegerConverter() : new IntegerConverter(defaultNumber));

register(Long.class, throwException ? new

LongConverter() : new LongConverter(defaultNumber));

register(Short.class, throwException ? new

ShortConverter() : new ShortConverter(defaultNumber));

register(String.class, throwException ? new

StringConverter() : new StringConverter(stringDefault));

}

// 其他类型

private void registerOther(boolean throwException) {

register(Class.class, throwException ? new

ClassConverter() : new ClassConverter(null));

register(java.util.Date.class, throwException ?

new

DateConverter() : new DateConverter(null));

register(Calendar.class, throwException ? new

CalendarConverter() : new CalendarConverter(null));

register(File.class, throwException ? new

FileConverter() : new FileConverter(null));

register(java.sql.Date.class, throwException ?

new

SqlDateConverter() : new SqlDateConverter(null));

register(java.sql.Time.class, throwException ?

new

SqlTimeConverter() : new SqlTimeConverter(null));

register(Timestamp.class, throwException ? new SqlTimestampConverter() : new

SqlTimestampConverter(null));

register(URL.class, throwException ? new

URLConverter() : new URLConverter(null));

}

// 数组类型

private void registerArrays(boolean throwException, int

defaultArraySize) {

// Primitives

registerArrayConverter(Boolean.TYPE, new BooleanConverter(), throwException, defaultArraySize);

registerArrayConverter(Byte.TYPE, new

ByteConverter(), throwException, defaultArraySize);

registerArrayConverter(Character.TYPE, new

CharacterConverter(), throwException, defaultArraySize);

registerArrayConverter(Double.TYPE, new

DoubleConverter(), throwException, defaultArraySize);

registerArrayConverter(Float.TYPE, new

FloatConverter(), throwException, defaultArraySize);

registerArrayConverter(Integer.TYPE, new IntegerConverter(), throwException, defaultArraySize);

registerArrayConverter(Long.TYPE, new

LongConverter(), throwException, defaultArraySize);

registerArrayConverter(Short.TYPE, new

ShortConverter(), throwException, defaultArraySize);

// Standard

registerArrayConverter(BigDecimal.class, new

BigDecimalConverter(), throwException, defaultArraySize);

registerArrayConverter(BigInteger.class, new

BigIntegerConverter(), throwException, defaultArraySize);

registerArrayConverter(Boolean.class, new

BooleanConverter(), throwException, defaultArraySize);

registerArrayConverter(Byte.class, new

ByteConverter(), throwException, defaultArraySize);

registerArrayConverter(Character.class, new CharacterConverter(), throwException,

defaultArraySize);

registerArrayConverter(Double.class, new

DoubleConverter(), throwException, defaultArraySize);

registerArrayConverter(Float.class, new

FloatConverter(), throwException, defaultArraySize);

registerArrayConverter(Integer.class, new

IntegerConverter(), throwException, defaultArraySize);

registerArrayConverter(Long.class, new

LongConverter(), throwException, defaultArraySize);

registerArrayConverter(Short.class, new

ShortConverter(), throwException, defaultArraySize);

registerArrayConverter(String.class, new

StringConverter(), throwException, defaultArraySize);

// Other

registerArrayConverter(Class.class, new

ClassConverter(), throwException, defaultArraySize);

registerArrayConverter(java.util.Date.class, new

DateConverter(), throwException, defaultArraySize);

registerArrayConverter(Calendar.class, new

DateConverter(), throwException, defaultArraySize);

registerArrayConverter(File.class, new

FileConverter(), throwException, defaultArraySize);

registerArrayConverter(java.sql.Date.class, new

SqlDateConverter(), throwException, defaultArraySize);

registerArrayConverter(java.sql.Time.class, new

SqlTimeConverter(), throwException, defaultArraySize);

registerArrayConverter(Timestamp.class, new SqlTimestampConverter(), throwException,

defaultArraySize);

registerArrayConverter(URL.class, new

URLConverter(), throwException, defaultArraySize);

}

注意:如果需要注册自定义类型,可以调用ConvertUtils的public

static void register(Converter converter, Class

clazz)方法进行注册;

示例:

package com.ipan.project.test;

import java.util.Date;

public class User {

private Long id;

private String name;

private int age;

private Date birthday;

public Long getId() {

return id;

}

public void setId(Long id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public Date getBirthday() {

return birthday;

}

public void setBirthday(Date birthday) {

this.birthday = birthday;

}

}

package com.ipan.project.test;

import java.util.Date;

import org.apache.commons.beanutils.BeanUtils;

import org.apache.commons.beanutils.ConstructorUtils;

import org.apache.commons.beanutils.ConvertUtils;

import org.apache.commons.beanutils.MethodUtils;

import org.apache.commons.beanutils.PropertyUtils;

import org.apache.commons.lang.StringUtils;

import org.apache.commons.lang.time.DateFormatUtils;

import org.apache.commons.lang.time.DateUtils;

import org.junit.Test;

public class MyTest {

@Test

public void propertyTest() {

User user = null;

// 创建对象

try {

user = (User)

ConstructorUtils.invokeConstructor(User.class, null);

} catch (Exception e) {

e.printStackTrace();

}

// 设置属性

try {

BeanUtils.setProperty(user,

"id", "100");

BeanUtils.setProperty(user,

"name", "小王");

BeanUtils.setProperty(user,

"age", "28");

BeanUtils.setProperty(user,

"birthday", DateUtils.parseDate("1986-01-01", new

String[]{"yyyy-MM-dd"}));

} catch (Exception e) {

e.printStackTrace();

}

// 输出属性

try {

Long id =

(Long) PropertyUtils.getProperty(user, "id");

String name =

(String) PropertyUtils.getProperty(user, "name");

int age =

(Integer) PropertyUtils.getProperty(user, "age");

Date date =

(Date) PropertyUtils.getProperty(user, "birthday");

System.out.println("[id="

+ id + ", name=" + name + ", age=" + age + ", date=" +

DateFormatUtils.format(date,

"yyyy-MM-dd") + "]");

} catch (Exception e) {

e.printStackTrace();

}

// 修改属性

try {

String method

= "set" + StringUtils.capitalize("age");

Object

targetVal = ConvertUtils.convert("29",

PropertyUtils.getPropertyDescriptor(user,

"age").getPropertyType());

MethodUtils.invokeMethod(user,

method, targetVal);

method =

PropertyUtils.getPropertyDescriptor(user,

"age").getReadMethod().getName();

System.out.println("new

age=" + MethodUtils.invokeMethod(user, method, null));

} catch (Exception e) {

e.printStackTrace();

}

}

}

动态JavaBean

对象结构图如下:

a4c26d1e5885305701be709a3d33442f.png

每一个JavaBean对象都对应着一个Class对象,并且每个运行中的JavaBean不能增加或者删除属性;为了解决这个问题,提供了DynaBean对象,以上的工具类均兼容动态Bean以及标准JavaBean;

但是,在实际项目中,几乎非常少需要使用动态Bean,所以这块不做深入讨论;等用到后,再说;

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值