KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > dynaop > DynamicProxyCreator


1 package dynaop;
2
3 import java.lang.reflect.Constructor JavaDoc;
4 import java.lang.reflect.InvocationHandler JavaDoc;
5 import java.util.ArrayList JavaDoc;
6 import java.util.Arrays JavaDoc;
7 import java.util.List JavaDoc;
8
9 import dynaop.util.Classes;
10 import dynaop.util.NestedException;
11
12 /**
13  * Creates proxy instances.
14  *
15  * @author Bob Lee (crazybob@crazybob.org)
16  */

17 class DynamicProxyCreator {
18
19     private static final Class JavaDoc[] CONSTRUCTOR_ARGUMENT_TYPES =
20         new Class JavaDoc[] { InvocationHandler JavaDoc.class };
21
22     private ProxyType proxyType;
23     private Class JavaDoc proxyClass;
24     private Constructor JavaDoc proxyConstructor;
25     
26     DynamicProxyCreator(ProxyType proxyType) {
27         this.proxyType = proxyType;
28         Class JavaDoc[] interfaces = proxyType.getInterfaces();
29         
30         // add Proxy to list of interfaces.
31
List JavaDoc interfaceList = new ArrayList JavaDoc(interfaces.length + 1);
32         interfaceList.add(Proxy.class);
33         interfaceList.addAll(Arrays.asList(interfaces));
34         interfaces =
35             (Class JavaDoc[]) interfaceList.toArray(new Class JavaDoc[interfaceList.size()]);
36         
37         // get dynamic proxy class.
38
this.proxyClass = java.lang.reflect.Proxy.getProxyClass(
39             Classes.commonLoader(interfaces), interfaces);
40         try {
41             // get constructor.
42
this.proxyConstructor =
43                 this.proxyClass.getConstructor(CONSTRUCTOR_ARGUMENT_TYPES);
44         }
45         catch (Exception JavaDoc e) {
46             throw NestedException.wrap(e);
47     
48         }
49     }
50     
51     ProxyType getProxyType() {
52         return proxyType;
53     }
54
55     Proxy createProxy(InvocationHandler JavaDoc handler) {
56         try {
57             return (Proxy) this.proxyConstructor.newInstance(
58                 new Object JavaDoc[] { handler });
59         }
60         catch (Exception JavaDoc e) {
61             throw NestedException.wrap(e);
62         }
63     }
64 }
65
Popular Tags