| 1 4 package org.terracotta.modules.cglib_2_1_3.object.config; 5 6 import org.terracotta.modules.cglib_2_1_3.object.dna.impl.CGLibBulkBeanInstance; 7 import org.terracotta.modules.cglib_2_1_3.object.dna.impl.CGLibFactoryInstance; 8 9 import com.tc.object.config.ChangeApplicatorSpec; 10 import com.tc.object.config.ModuleSpec; 11 12 13 public class CGLibModuleSpec implements ModuleSpec { 14 private final ChangeApplicatorSpec changeAppSpec; 15 16 public CGLibModuleSpec(ChangeApplicatorSpec changeAppSpec) { 17 this.changeAppSpec = changeAppSpec; 18 } 19 20 public ChangeApplicatorSpec getChangeApplicatorSpec() { 21 return this.changeAppSpec; 22 } 23 24 public Class getPeerClass(Class clazz) { 25 if (isImplementCglibFactory(clazz)) { 26 return CGLibFactoryInstance.class; 27 } else if (isCglibBulkBean(clazz)) { 28 return CGLibBulkBeanInstance.class; 29 } 30 return clazz; 31 } 32 33 public boolean isUseNonDefaultConstructor(Class clazz) { 34 return (isImplementCglibFactory(clazz) || isCglibBulkBean(clazz)); 35 } 36 37 public boolean isPortableClass(Class clazz) { 38 return (isImplementCglibFactory(clazz) || isCglibBulkBean(clazz)); 39 } 40 41 private static boolean isImplementCglibFactory(Class clazz) { 42 if (CGLibFactoryInstance.class.getName().equals(clazz.getName())) { return true; } 43 44 Class [] interfaces = clazz.getInterfaces(); 45 for (int i = 0; i < interfaces.length; i++) { 46 if (interfaces[i].getName().equals("net.sf.cglib.proxy.Factory")) { return true; } 47 } 48 return false; 49 } 50 51 private static boolean isCglibBulkBean(Class clazz) { 52 if (CGLibBulkBeanInstance.class.getName().equals(clazz.getName())) { return true; } 53 54 Class superClass = clazz.getSuperclass(); 55 if (superClass == null) { return false; } 56 return "net.sf.cglib.beans.BulkBean".equals(superClass.getName()); 57 } 58 59 } 60 | Popular Tags |