Commons-Beanutils(一)
Commons-Beanutils 这个是jakarta commons项目中的一个子项目。这个项目开发的目的是帮助开发者动态的获取/设值Java Bean的属性,同时解决每次都要写getXXX和setXXX的麻烦。
一、XXXConvert
这些类都实现Converter接口,提供把value值转化成为相应XXX类的实现。现在只针对四种类型:数字,时间,Boolean和 String。在Converter 接口中只有一个方法convert(Class type, Object value),把value对象转换为type所要求的类。XXXConvert类中这个方法的思路是:
1、如果value==null,并且自己内部有缺省的值那么就返回这个缺省的值。如果没有缺省值,就抛出ConversionException异常。
2、如果value instanceOf XXX类,那么就直接返回value。
3、如果上面的都不行,那么调用new XXX(value.toString())或者XXX.valueOf(value.toString())方法来返回。转化失败时,抛出ConversionException异常。
二、特殊的实现
1、对于ClassConverter类,当进入第三种情形的时候,实际执行的是
ClassLoader classLoader =Thread.currentThread().getContextClassLoader(); if (classLoader == null) { classLoader = ClassConverter.class.getClassLoader(); } return (classLoader.loadClass(value.toString())); JAVA天堂
2、对于BooleanConverter类,当进入第三种情形的时候,实际执行的是,根据value.toString()的值:yes,y, true, on, 1 返回true;no,n,false,off,0 返回false。如果这些情形都不符合,并且有缺省值的时候则返回缺省值。否则抛出ConversionException;
三、XXXArrayConverter
这些类继承自AbstractArrayConverter类。 AbstractArrayConverter 实际只实现了一个List parseElements(String svalue)方法。这个方法接受的是{value1, value2,...}格式的字符串,逐个解析出来后,放入一个ArrayList中。它通过StreamTokenizer解析字符串: StreamTokenizer是用来分离input stream中读取的字符串,并且可以根据标记区分不同的内容,比如数字,字符或者注释。XXXArrayConverter由于要转换的是一个数组,所以convert(....)方法的实现过程有所不同。
1、如果value==null,并且自己内部有缺省的值那么就返回这个缺省的值。如果没有缺省值,就抛出ConversionException异常。
2、如果model.getClass() == value.getClass(),那么就直接返回value。
3、如果上面的都不行,那么就通过parseElements(value.toString())生成一个数组,再对数组的元素逐个调用new XXX(list.get(i))或者XXX.valueOf(list.get(i))方法,转换成为数组对元素要求的类型。转化失败时,抛出 ConversionException异常。
Commons-Beanutils(二)
一、LocaleConverter 与 BaseLocaleConverter
LocaleConverter继承自 Converter接口,定义了一个新方法convert(Class type, Object value, String pattern)。
抽象类BaseLocaleConverter实现了LocaleConverter接口。它的locPattern属性用来表示这个对象的 pattern是否是本地化的格式。patttern 是指把何种格式的时间或者数字值转换成标准值。convert(...)的执行过程是:
1、如果value==null,并且自己内部有缺省的值那么就返回这个缺省的值。如果没有缺省值,就抛出ConversionException异常。
本文介绍了Jakarta Commons-Beanutils项目,详细讲解了如何使用Beanutils简化JavaBean属性的获取与设置,包括Converter接口及其实现类如BooleanConverter的工作原理。
117

被折叠的 条评论
为什么被折叠?



