From 2fcd97552d16718cc7997629fd637a73a5a4483f Mon Sep 17 00:00:00 2001 From: 郑永安 <zyazyz250@sina.com> Date: 星期一, 19 六月 2023 14:44:19 +0800 Subject: [PATCH] 删除 --- src/main/java/com/gk/firework/Domain/Utils/BeanUtils.java | 223 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 223 insertions(+), 0 deletions(-) diff --git a/src/main/java/com/gk/firework/Domain/Utils/BeanUtils.java b/src/main/java/com/gk/firework/Domain/Utils/BeanUtils.java new file mode 100644 index 0000000..d5e24d5 --- /dev/null +++ b/src/main/java/com/gk/firework/Domain/Utils/BeanUtils.java @@ -0,0 +1,223 @@ +package com.gk.firework.Domain.Utils; + + +import org.springframework.cglib.beans.BeanCopier; +import org.springframework.cglib.beans.BeanGenerator; +import org.springframework.cglib.beans.BeanMap; + +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Marshaller; +import javax.xml.bind.Unmarshaller; +import java.beans.PropertyDescriptor; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.StringWriter; +import java.lang.reflect.Method; +import java.util.Map; + +/** + * 基于CGlib + * 实体工具类,目前copy不支持map、list + * @author L.cm + * email: 596392912@qq.com + * site:http://www.dreamlu.net + * @date 2015年4月26日下午5:10:42 + */ +public final class BeanUtils extends org.springframework.beans.BeanUtils { + private BeanUtils(){} + + /** + * 实例化对象 + * @param clazz 类 + * @return 对象 + */ + @SuppressWarnings("unchecked") + public static <T> T newInstance(Class<?> clazz) { + return (T) instantiate(clazz); + } + + /** + * 实例化对象 + * @param clazzStr 类名 + * @return 对象 + */ + public static <T> T newInstance(String clazzStr) { + try { + Class<?> clazz = Class.forName(clazzStr); + return newInstance(clazz); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } + } + + /** + * 获取Bean的属性 + * @param bean bean + * @param propertyName 属性名 + * @return 属性值 + */ + public static Object getProperty(Object bean, String propertyName) { + PropertyDescriptor pd = getPropertyDescriptor(bean.getClass(), propertyName); + if (pd == null) { + throw new RuntimeException("Could not read property '" + propertyName + "' from bean PropertyDescriptor is null"); + } + Method readMethod = pd.getReadMethod(); + if (readMethod == null) { + throw new RuntimeException("Could not read property '" + propertyName + "' from bean readMethod is null"); + } + if (!readMethod.isAccessible()) { + readMethod.setAccessible(true); + } + try { + return readMethod.invoke(bean); + } catch (Throwable ex) { + throw new RuntimeException("Could not read property '" + propertyName + "' from bean", ex); + } + } + + /** + * 设置Bean属性 + * @param bean bean + * @param propertyName 属性名 + * @param value 属性值 + */ + public static void setProperty(Object bean, String propertyName, Object value) { + PropertyDescriptor pd = getPropertyDescriptor(bean.getClass(), propertyName); + if (pd == null) { + throw new RuntimeException("Could not set property '" + propertyName + "' to bean PropertyDescriptor is null"); + } + Method writeMethod = pd.getWriteMethod(); + if (writeMethod == null) { + throw new RuntimeException("Could not set property '" + propertyName + "' to bean writeMethod is null"); + } + if (!writeMethod.isAccessible()) { + writeMethod.setAccessible(true); + } + try { + writeMethod.invoke(bean, value); + } catch (Throwable ex) { + throw new RuntimeException("Could not set property '" + propertyName + "' to bean", ex); + } + } + + /** + * 给一个Bean添加字段 + * @param superBean 父级Bean + * @param props 新增属性 + * @return {Object} + */ + public static Object generator(Object superBean, BeanProperty... props) { + Class<?> superclass = superBean.getClass(); + Object genBean = generator(superclass, props); + BeanUtils.copy(superBean, genBean); + return genBean; + } + + /** + * 给一个class添加字段 + * @param superclass 父级 + * @param props 新增属性 + * @return {Object} + */ + public static Object generator(Class<?> superclass, BeanProperty... props) { + BeanGenerator generator = new BeanGenerator(); + generator.setSuperclass(superclass); + generator.setUseCache(true); + for (BeanProperty prop : props) { + generator.addProperty(prop.getName(), prop.getType()); + } + return generator.create(); + } + + /** + * copy 对象属性到另一个对象,默认不使用Convert + * @param src + * @param clazz 类名 + * @return T + */ + public static <T> T copy(Object src, Class<T> clazz) { + BeanCopier copier = BeanCopier.create(src.getClass(), clazz, false); + + T to = newInstance(clazz); + copier.copy(src, to, null); + return to; + } + + /** + * 拷贝对象 + * @param src 源对象 + * @param dist 需要赋值的对象 + */ + public static void copy(Object src, Object dist) { + BeanCopier copier = BeanCopier + .create(src.getClass(), dist.getClass(), false); + + copier.copy(src, dist, null); + } + + /** + * 将对象装成map形式 + * @param src + * @return + */ + @SuppressWarnings("rawtypes") + public static Map toMap(Object src) { + return BeanMap.create(src); + } + + /** + * 将map 转为 bean + */ + public static <T> T toBean(Map<String, Object> beanMap, Class<T> valueType) { + T bean = BeanUtils.newInstance(valueType); + PropertyDescriptor[] beanPds = getPropertyDescriptors(valueType); + for (PropertyDescriptor propDescriptor : beanPds) { + String propName = propDescriptor.getName(); + // 过滤class属性 + if (propName.equals("class")) { + continue; + } + if (beanMap.containsKey(propName)) { + Method writeMethod = propDescriptor.getWriteMethod(); + if (null == writeMethod) { + continue; + } + Object value = beanMap.get(propName); + if (!writeMethod.isAccessible()) { + writeMethod.setAccessible(true); + } + try { + writeMethod.invoke(bean, value); + } catch (Throwable e) { + throw new RuntimeException("Could not set property '" + propName + "' to bean", e); + } + } + } + return bean; + } + + public static String beanToXml(Object obj,Class<?> load) throws JAXBException { + JAXBContext context = JAXBContext.newInstance(load); + Marshaller marshaller = context.createMarshaller(); + marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); + marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8"); + StringWriter writer = new StringWriter(); + marshaller.marshal(obj,writer); + return writer.toString(); + } + + /** + * xml文件配置转换为对象 + * @param xml xml字符串 + * @param load java对象.Class + * @return java对象 + * @throws JAXBException + */ + public static Object xmlToBean(String xml,Class<?> load) throws JAXBException { + JAXBContext context = JAXBContext.newInstance(load); + Unmarshaller unmarshaller = context.createUnmarshaller(); + return unmarshaller.unmarshal(new ByteArrayInputStream(xml.getBytes())); + } + +} -- Gitblit v1.9.2