最近工作中剥离通用功能比较多。 Maven引用: <!-- https://mvnrepository.com/artifact/cglib/cglib --> <dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>2.2.2</version> </dependency> 不要引用太高级的版本。会存在兼容问题。本身有内部依赖。 核心类: import net.sf.cglib.beans.*; import java.util.*; public class DynamicBean { private Object object = null; //动态生成的类 private BeanMap beanMap = null; //存放属性名称以及属性的类型 public DynamicBean() { super(); } public DynamicBean(Map propertyMap) { this.object = generateBean(propertyMap); this.beanMap = BeanMap.create(this.object); } /** * @param propertyMap * @return */ private Object generateBean(Map propertyMap) { BeanGenerator generator = new BeanGenerator(); Set keySet = propertyMap.keySet(); for (Iterator i = keySet.iterator(); i.hasNext(); ) { String key = (String) i.next(); generator.addProperty(key, (Class) propertyMap.get(key)); } return generator.create(); } /** * 给bean属性赋值 * * @param property 属性名 * @param value 值 */ public void setValue(Object property, Object value) { beanMap.put(property, value); } /** * 通过属性名得到属性值 * * @param property 属性名 * @return 值 */ public Object getValue(String property) { return beanMap.get(property); } /** * 得到该实体bean对象 * * @return */ public Object getObject() { return this.object; } } 帮助类: import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import java.util.*; public class ClassUtil { /** * * @param object 旧的对象带值 * @param addMap 动态需要添加的属性和属性类型 * @param addValMap 动态需要添加的属性和属性值 * @return 新的对象 * @throws Exception */ public Object dynamicClass(Object object,HashMap addMap, HashMap addValMap) throws Exception { HashMap returnMap = new HashMap(); HashMap typeMap = new HashMap(); Class<?> type = object.getClass(); BeanInfo beanInfo = Introspector.getBeanInfo(type); PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); for (int i = 0; i < propertyDescriptors.length; i++) { PropertyDescriptor descriptor = propertyDescriptors[i]; String propertyName = descriptor.getName(); if (!propertyName.equals("class")) { Method readMethod = descriptor.getReadMethod(); Object result = readMethod.invoke(object); //可以判断为 NULL不赋值 returnMap.put(propertyName, result); typeMap.put(propertyName, descriptor.getPropertyType()); } } returnMap.putAll(addValMap); typeMap.putAll(addMap); //map转换成实体对象 DynamicBean bean = new DynamicBean(typeMap); //赋值 Set keys = typeMap.keySet(); for (Iterator it = keys.iterator(); it.hasNext(); ) { String key = (String) it.next(); bean.setValue(key, returnMap.get(key)); } Object obj = bean.getObject(); return obj; } } 使用: Order order = new Order(); order.setId(1); order.setName("order1"); List<OrderDetail> orderDetailList = new ArrayList<OrderDetail>(); OrderDetail orderDetail = new OrderDetail(); orderDetail.setOrderid(1); orderDetail.setOrderPrice("1USD"); orderDetail.setOrderSku("Sku1"); orderDetailList.add(orderDetail); OrderDetail orderDetail2 = new OrderDetail(); orderDetail2.setOrderid(1); orderDetail2.setOrderPrice("2USD"); orderDetail2.setOrderSku("Sku2"); orderDetailList.add(orderDetail2); try { HashMap addMap = new HashMap(); HashMap addValMap = new HashMap(); addMap.put("orderDetail", Class.forName("java.util.List")); addValMap.put("orderDetail", orderDetailList); Object obj2= new ClassUtil().dynamicClass(order,addMap,addValMap); System.out.println(JSON.toJSONString(obj2)); } catch (Exception e) { e.printStackTrace(); } |
|手机版|小黑屋|梦想之都-俊月星空
( 粤ICP备18056059号 )|网站地图
GMT+8, 2025-7-1 18:14 , Processed in 0.039263 second(s), 18 queries .
Powered by Mxzdjyxk! X3.5
© 2001-2025 Discuz! Team.