BeanUtils
来源:互联网 发布:知敬畏守规矩议论文 编辑:程序博客网 时间:2024/05/21 17:53
/** * 扩展Apache Commons BeanUtils, 提供一些反射方面缺失的封装. */public class BeanUtil extends BeanUtils { protected static Logger logger = Logger.getLogger(BeanUtil.class); /** * 覆写org.apache.commons.beanutils.BeanUtils的copyProperties方法 */ public static void copyProperties(Object dest, Object orig) throws IllegalAccessException, InvocationTargetException { registerConverter(); BeanUtilsBean.getInstance().copyProperties(dest, orig); } /** * 覆写org.apache.commons.beanutils.BeanUtils的copyProperty方法 */ public static void copyProperty(Object dest, String fieldName, Object value) throws IllegalAccessException, InvocationTargetException { registerConverter(); BeanUtilsBean.getInstance().copyProperty(dest, fieldName, value); } /** * 注册类型转换,可以避免两个问题: 1、对于数值型,当源对象中的字段为null,避免转换成0等; 2、增加java.util.Date的类型转换,格式为“yyyy-MM-dd”或“yyyyMMdd”; */ public static void registerConverter() { ConvertUtils.register(new IntegerConverter(null), Integer.class); ConvertUtils.register(new LongConverter(null), Long.class); ConvertUtils.register(new FloatConverter(null), Float.class); ConvertUtils.register(new DoubleConverter(null), Double.class); ConvertUtils.register(new BigDecimalConverter(null), BigDecimal.class); ConvertUtils.register(new SqlDateConverter(null), java.sql.Date.class); ConvertUtils.register(new SqlTimestampConverter(null), Timestamp.class); ConvertUtils.register(new DateConverter(null), java.util.Date.class); } /** * 直接读取对象属性值,无视private/protected修饰符,不经过getter函数. */ public static Object getFieldValue(Object object, String fieldName) throws NoSuchFieldException { Field field = getDeclaredField(object, fieldName); if (!field.isAccessible()) { field.setAccessible(true); } Object result = null; try { result = field.get(object); } catch (IllegalAccessException e) { logger.error("不可能抛出的异常{}", e); } return result; } /** * 直接设置对象属性值,无视private/protected修饰符,不经过setter函数. */ public static void setFieldValue(Object object, String fieldName, Object value) throws NoSuchFieldException { Field field = getDeclaredField(object, fieldName); if (!field.isAccessible()) { field.setAccessible(true); } try { field.set(object, value); } catch (IllegalAccessException e) { logger.error("不可能抛出的异常:{}", e); } } /** * 循环向上转型,获取对象的DeclaredField. */ public static Field getDeclaredField(Object object, String fieldName) throws NoSuchFieldException { Assert.notNull(object); return getDeclaredField(object.getClass(), fieldName); } /** * 循环向上转型,获取类的DeclaredField. */ public static Field getDeclaredField(Class<?> clazz, String fieldName) throws NoSuchFieldException { Assert.notNull(clazz); Assert.hasText(fieldName); for (Class<?> superClass = clazz; superClass != Object.class; superClass = superClass.getSuperclass()) { try { return superClass.getDeclaredField(fieldName); } catch (NoSuchFieldException e) { // Field不在当前类定义,继续向上转型 } } throw new NoSuchFieldException("No such field: " + clazz.getName() + '.' + fieldName); } /** * 深克隆对象 * * @param <T> * @param obj * @return */ @SuppressWarnings("unchecked") public static <T> T getDeepClone(T obj) { try { // 将对象写到流里 ByteArrayOutputStream bo = new ByteArrayOutputStream(); ObjectOutputStream oo = new ObjectOutputStream(bo); oo.writeObject(obj); // 从流里读出来 ByteArrayInputStream bi = new ByteArrayInputStream(bo.toByteArray()); ObjectInputStream oi = new ObjectInputStream(bi); return (T) oi.readObject(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } return null; }}
0 0
- beanutils
- BeanUtils
- BeanUtils
- BeanUtils
- beanutils
- beanutils
- BeanUtils
- BeanUtils
- BeanUtils
- BeanUtils
- Beanutils
- BeanUtils
- BeanUtils
- BeanUtils
- BeanUtils
- BeanUtils
- BeanUtils
- BeanUtils
- struts2入门(9.19上午)
- ThinkPHP的URL重写时遇到No input file specified的解决方法
- 完整安装minidwep-gtk教程
- linux下制作使用动静态库
- 设计基于HTML5的APP登录功能及安全调用接口的方式(原理篇)
- BeanUtils
- android 4.4.4 系统原生闹钟源码解析(附源码)
- HTML标签
- 自定义注解与spring事务的问题
- android清除缓存会将数据库清除吗?
- cannot determine loading status from unexperted alert open
- 云计算的三种服务模式:IaaS,PaaS和SaaS
- RabbitMq、ActiveMq、ZeroMq、kafka之间的比较,资料汇总
- iOS 拖Xib的时候 显示 Could not insert new outlet connection