package com.test.fastjson; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.serializer.SerializerFeature; import com.jarvis.cache.clone.Cloning; import com.jarvis.cache.clone.ICloner; import com.jarvis.cache.serializer.FastjsonSerializer; import com.jarvis.cache.serializer.HessianSerializer; import com.jarvis.cache.serializer.ISerializer; import com.jarvis.cache.serializer.JacksonJsonSerializer; import com.jarvis.cache.serializer.JdkSerializer; import com.test.Stopwatch; import net.sf.cglib.beans.BeanCopier; public class DeepCloneTest { private static final SerializerFeature[] features={SerializerFeature.DisableCircularReferenceDetect}; private static int hot=10000; private static int run=100000; public static void main(String[] args) throws Exception { List<User> list=new ArrayList<User>(); User user=new User(); user.setId(1); user.setName("test"); user.setBirthday(new Date()); list.add(user); BeanCopier copy=BeanCopier.create(user.getClass(), user.getClass(), false); User user2=User.class.newInstance(); user.setName("testaaaa"); copy.copy(user, user2, null); System.out.println(user2); List list1=list.getClass().newInstance(); Collections.addAll(list1, list); user.setName("test1111"); Collections.copy(list1, list); System.out.println(list1); Type type1=list.getClass().getGenericSuperclass(); if(type1 instanceof ParameterizedType) { ParameterizedType type=((ParameterizedType)type1); System.out.println(type); } else { System.out.println("type2 is not ParameterizedType"); } List list2=new ArrayList(); Type type2=list2.getClass().getGenericSuperclass(); if(type2 instanceof ParameterizedType) { ParameterizedType type=((ParameterizedType)type2); System.out.println(type.getActualTypeArguments()[0].getClass().getName()); } else { System.out.println("type2 is not ParameterizedType"); } // test1(); // fastJsonTest(); deepClone(new JdkSerializer()); deepClone(new HessianSerializer()); deepClone(new FastjsonSerializer()); deepClone(new JacksonJsonSerializer()); deepClone(new Cloning()); } private static void test1() { List<User> list=new ArrayList<User>(); User user=new User(); user.setId(1); user.setName("test"); user.setBirthday(new Date()); list.add(user); Map<Integer, User> map=new HashMap<Integer, User>(); map.put(user.getId(), user); Object[] arr=new Object[]{1, "test", list, map, User.class}; String json=JSON.toJSONString(arr, features); System.out.println(json); Object[] arr2=JSON.parseObject(json, arr.getClass()); for(int i=0; i < arr2.length; i++) { Object obj=arr2[i]; System.out.println(obj.getClass().getName() + "--->" + obj); } } private static void fastJsonTest() { List<User> list=new ArrayList<User>(); User user=new User(); user.setId(1); user.setName("test"); user.setBirthday(new Date()); list.add(user); Map<Integer, User> map=new HashMap<Integer, User>(); map.put(user.getId(), user); Object[] arr=new Object[]{1, "test", list, map, User.class}; ISerializer<Object> s=new FastjsonSerializer(); try { System.out.println("--------------obj arr------------------"); Object[] rs=(Object[])s.deepClone(arr, null); for(int i=0; i < rs.length; i++) { Object obj=rs[i]; System.out.println(obj.getClass().getName() + "--->" + obj); } } catch(Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("--------------user arr------------------"); User[] arr2=new User[]{user}; try { Object[] rs=(Object[])s.deepClone(arr2, null); for(int i=0; i < rs.length; i++) { Object obj=rs[i]; System.out.println(obj.getClass().getName() + "--->" + obj); } } catch(Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("--------------map------------------"); try { Map<Integer, User> obj=(Map<Integer, User>)s.deepClone(map, null); Iterator<Map.Entry<Integer, User>> it=obj.entrySet().iterator(); while(it.hasNext()) { Map.Entry<Integer, User> enty=it.next(); Object key=enty.getKey(); Object val=enty.getValue(); System.out.println(key.getClass().getName() + "--->" + key); System.out.println(val.getClass().getName() + "--->" + val); } } catch(Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } private static Object getUser() { List<User> list=new ArrayList<User>(); User user=new User(); user.setId(1); user.setName("test"); user.setBirthday(new Date()); list.add(user); Map<Integer, User> map=new HashMap<Integer, User>(); User user2=new User(); user2.setId(1); user2.setName("test"); user2.setBirthday(new Date()); map.put(user2.getId(), user2); return new Object[]{list, map, user}; } public static void deepClone(ICloner h) throws Exception { Object user=getUser(); for(int i=0; i < hot; i++) { h.deepClone(user, null); } Stopwatch sw=Stopwatch.begin(); for(int i=0; i < run; i++) { h.deepClone(user, null); } sw.stop(); System.out.println(h.getClass().getName() + ": " + sw); } }