1 package dynaop; 2 3 import java.lang.reflect.Constructor ; 4 import java.lang.reflect.InvocationHandler ; 5 import java.util.ArrayList ; 6 import java.util.Arrays ; 7 import java.util.List ; 8 9 import dynaop.util.Classes; 10 import dynaop.util.NestedException; 11 12 17 class DynamicProxyCreator { 18 19 private static final Class [] CONSTRUCTOR_ARGUMENT_TYPES = 20 new Class [] { InvocationHandler .class }; 21 22 private ProxyType proxyType; 23 private Class proxyClass; 24 private Constructor proxyConstructor; 25 26 DynamicProxyCreator(ProxyType proxyType) { 27 this.proxyType = proxyType; 28 Class [] interfaces = proxyType.getInterfaces(); 29 30 List interfaceList = new ArrayList (interfaces.length + 1); 32 interfaceList.add(Proxy.class); 33 interfaceList.addAll(Arrays.asList(interfaces)); 34 interfaces = 35 (Class []) interfaceList.toArray(new Class [interfaceList.size()]); 36 37 this.proxyClass = java.lang.reflect.Proxy.getProxyClass( 39 Classes.commonLoader(interfaces), interfaces); 40 try { 41 this.proxyConstructor = 43 this.proxyClass.getConstructor(CONSTRUCTOR_ARGUMENT_TYPES); 44 } 45 catch (Exception e) { 46 throw NestedException.wrap(e); 47 48 } 49 } 50 51 ProxyType getProxyType() { 52 return proxyType; 53 } 54 55 Proxy createProxy(InvocationHandler handler) { 56 try { 57 return (Proxy) this.proxyConstructor.newInstance( 58 new Object [] { handler }); 59 } 60 catch (Exception e) { 61 throw NestedException.wrap(e); 62 } 63 } 64 } 65 | Popular Tags |