commons-beanutils.jar详解

来源:互联网 发布:搜索软件 编辑:程序博客网 时间:2024/06/05 21:49

 1BeanUtils最核心的好处在于:我们在编码时,并不需要知道我们处理的JavaBeans具体是什么类型,有哪些属性,这些信息是可以动态获取的,甚至我们都可以不必去关心事实上是否存在这样一个具体的JavaBean类。我们只需要知道有一个JavaBean的实例,我们需要从中取得某个属性,设定某个属性的值,或者仅仅是需要一个属性表。要做到这些,依靠Sun提供的JavaBean规范似乎找不到一个很直接的方式,除非硬编码,将getXxxx()setXxxx()直接写进我们的程序。但是这样就大大增加了代码的复杂度、耦合性和维护成本。还好Commons BeanUtils对这个问题提供了一种优雅的解决方案。

 

Commons BeanUtils一共包括如下5个包:

org.apache.commons.beanutils– 核心包,定义一组Utils类和需要用到的接口规范

org.apache.commons.beanutils.converters– 转换String到需要类型的类,实现Converter接口

org.apache.commons.beanutils.locale beanutilslocale敏感版本

org.apache.commons.beanutils.locale.convertersconverterslocale敏感版本

org.apache.commons.collections beanutils使用到的Collection


其中需要我们特别关注的是这个org.apache.commons.beanutils包,其他包都是起辅助作用的。接下来我们就来看看如何使用beanutils包。

CommonsBeanutils是一组专门用于操作Bean的工具类,目前很多流行的框架基本都离不开他。

1、获取字段值

SampleBean bean1 = new SampleBean();

bean1.setName("rensanning");

bean1.setAge(31);

 

String name = BeanUtils.getProperty(bean1, "name");

String age  = BeanUtils.getProperty(bean1, "age");

 

System.out.println(name);

System.out.println(age);

2、设置字段值

 

SampleBean bean2 = new SampleBean();

BeanUtils.setProperty(bean2, "name", "rensanning");

BeanUtils.setProperty(bean2, "age", 31);

 

System.out.println(bean2.getName());

System.out.println(bean2.getAge());

3、赋值Bean 

 

SampleBean bean3 = new SampleBean();

bean3.setName("rensanning");

bean3.setAge(31);

 

SampleBean clone = (SampleBean) BeanUtils.cloneBean(bean3);

 

System.out.println(clone.getName());

System.out.println(clone.getAge());

4Beandescribe 

 

SampleBean bean4 = newSampleBean();

bean4.setName("rensanning");

bean4.setAge(31);

 

@SuppressWarnings("unchecked")

Map<String, String> map4 = BeanUtils.describe(bean4);

 

System.out.println(map4.get("name"));

System.out.println(map4.get("age"));

 

5Beanpopulate 

 

SampleBean bean5 = newSampleBean();

 

Map<String, String> map5 = newHashMap<String, String>();

map5.put("name""rensanning");

map5.put("age""31");

 

BeanUtils.populate(bean5, map5);

 

System.out.println(bean5.getName());

System.out.println(bean5.getAge());

6、获取Bean的数组集合字段值 

 

SampleBean bean6 = newSampleBean();

bean6.setArray(newString[]{"a""b""c"});

List<String> list0 = newArrayList<String>();

list0.add("d");

list0.add("e");

list0.add("f");

bean6.setList(list0);

 

String[] array = BeanUtils.getArrayProperty(bean6, "array");

 

System.out.println(array.length);//3

System.out.println(array[0]);//"a"

System.out.println(array[1]);//"b"

System.out.println(array[2]);//"c"

 

String[] list = BeanUtils.getArrayProperty(bean6, "list");

System.out.println(list.length);//3

System.out.println(list[0]);//"d"

System.out.println(list[1]);//"e"

System.out.println(list[2]);//"f"

 

System.out.println(BeanUtils.getProperty(bean6, "array[1]"));//"b"

System.out.println(BeanUtils.getIndexedProperty(bean6, "array", 2));//"c"

7、获取Bean的Map字段值

 

SampleBean bean7 = newSampleBean();

Map<String, String> map = newHashMap<String, String>();

map.put("key1""value1");

map.put("key2""value2");

bean7.setMap(map);

 

String value1 = BeanUtils.getMappedProperty(bean7, "map""key1");

System.out.println(value1);//"value1"

 

String value2 = BeanUtils.getMappedProperty(bean7, "map""key2");

System.out.println(value2);//"value2"

 

System.out.println(BeanUtils.getProperty(bean7, "map.key1"));//"value1"

System.out.println(BeanUtils.getProperty(bean7, "map.key2"));//"value2"

8、获取Bean的嵌套字段值 

 

SampleBean bean = newSampleBean();

NestedBean nestedBean = newNestedBean();

nestedBean.setNestedProperty("xxx");

bean.setNestedBean(nestedBean);

 

String value = BeanUtils.getNestedProperty(bean, "nestedBean.nestedProperty");

System.out.println(value);//"xxx"

 

System.out.println(BeanUtils.getProperty(bean, "nestedBean.nestedProperty"));//"xxx"

 

9、URL字段的特殊处理

SampleBean bean8 = newSampleBean();

 

BeanUtils.setProperty(bean8, "url""http://www.google.com/");

 

URL url = bean8.getUrl();

System.out.println(url.getProtocol());//"http"

System.out.println(url.getHost());//"www.google.com"

System.out.println(url.getPath());//"/"

10、日期的转化 

 

SampleBean bean9 = newSampleBean();

 

DateConverter converter = newDateConverter();

converter.setPattern("yyyy/MM/dd HH:mm:ss");

 

ConvertUtils.register(converter, Date.class);

ConvertUtils.register(converter, String.class);

 

BeanUtils.setProperty(bean9, "date""2010/12/19 23:40:00");

 

String value9 = BeanUtils.getProperty(bean9, "date");

System.out.println(value9);//"2010/12/19 23:40:00"

 

 

备注:

目前支持的转换类型:

sjava.lang.BigDecimal 

java.lang.BigInteger 

boolean and java.lang.Boolean 

byte and java.lang.Byte 

char and java.lang.Character 

java.lang.Class 

double and java.lang.Double 

float and java.lang.Float 

int and java.lang.Integer 

long and java.lang.Long 

short and java.lang.Short 

java.lang.String 

java.sql.Date 

java.sql.Time 

java.sql.Timestamp

 


0 0
原创粉丝点击