1 5 package org.terracotta.modules.cglib_2_1_3.object.config; 6 7 import org.terracotta.modules.cglib_2_1_3.object.dna.impl.CGLibBulkBeanInstance; 8 import org.terracotta.modules.cglib_2_1_3.object.dna.impl.CGLibFactoryInstance; 9 10 import com.tc.object.config.ChangeApplicatorSpec; 11 12 13 public class CGLibChangeApplicatorSpec implements ChangeApplicatorSpec { 14 private final static String CGLIB_FACTORY_APPLICATOR_CLASS_NAME = "org.terracotta.modules.cglib_2_1_3.object.applicator.CglibProxyApplicator"; 15 private final static String CGLIB_BULK_BEAN_APPLICATOR_CLASS_NAME = "org.terracotta.modules.cglib_2_1_3.object.applicator.CglibBulkBeanApplicator"; 16 17 private final ClassLoader classLoader; 18 19 public CGLibChangeApplicatorSpec(ClassLoader classLoader) { 20 this.classLoader = classLoader; 21 } 22 23 public Class getChangeApplicator(Class clazz) { 24 String changeApplicatorClassName = null; 25 if (isImplementCglibFactory(clazz)) { 26 changeApplicatorClassName = CGLIB_FACTORY_APPLICATOR_CLASS_NAME; 27 } else if (isCglibBulkBean(clazz)) { 28 changeApplicatorClassName = CGLIB_BULK_BEAN_APPLICATOR_CLASS_NAME; 29 } 30 if (changeApplicatorClassName != null) { 31 try { 32 if (classLoader == null) { 33 return Class.forName(changeApplicatorClassName); 34 } else { 35 return Class.forName(changeApplicatorClassName, false, classLoader); 36 } 37 } catch (Exception e) { 38 throw new AssertionError (e); 39 } 40 } 41 return null; 42 } 43 44 private static boolean isImplementCglibFactory(Class clazz) { 45 if (CGLibFactoryInstance.class.getName().equals(clazz.getName())) { return true; } 46 47 Class [] interfaces = clazz.getInterfaces(); 48 for (int i = 0; i < interfaces.length; i++) { 49 if (interfaces[i].getName().equals("net.sf.cglib.proxy.Factory")) { return true; } 50 } 51 return false; 52 } 53 54 private static boolean isCglibBulkBean(Class clazz) { 55 if (CGLibBulkBeanInstance.class.getName().equals(clazz.getName())) { return true; } 56 57 Class superClass = clazz.getSuperclass(); 58 if (superClass == null) { return false; } 59 return "net.sf.cglib.beans.BulkBean".equals(superClass.getName()); 60 } 61 62 } 63 | Popular Tags |