1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.pool2.proxy;
18
19 import org.apache.commons.pool2.UsageTracking;
20
21 import net.sf.cglib.proxy.Enhancer;
22 import net.sf.cglib.proxy.Factory;
23
24
25
26
27
28
29
30
31 public class CglibProxySource<T> implements ProxySource<T> {
32
33 private final Class<? extends T> superclass;
34
35
36
37
38
39
40 public CglibProxySource(final Class<? extends T> superclass) {
41 this.superclass = superclass;
42 }
43
44 @SuppressWarnings("unchecked")
45 @Override
46 public T createProxy(final T pooledObject, final UsageTracking<T> usageTracking) {
47 final Enhancer enhancer = new Enhancer();
48 enhancer.setSuperclass(superclass);
49
50 final CglibProxyHandler<T> proxyInterceptor =
51 new CglibProxyHandler<>(pooledObject, usageTracking);
52 enhancer.setCallback(proxyInterceptor);
53
54 return (T) enhancer.create();
55 }
56
57
58 @Override
59 public T resolveProxy(final T proxy) {
60 @SuppressWarnings("unchecked")
61 final
62 CglibProxyHandler<T> cglibProxyHandler =
63 (CglibProxyHandler<T>) ((Factory) proxy).getCallback(0);
64 return cglibProxyHandler.disableProxy();
65 }
66
67
68
69
70 @Override
71 public String toString() {
72 final StringBuilder builder = new StringBuilder();
73 builder.append("CglibProxySource [superclass=");
74 builder.append(superclass);
75 builder.append("]");
76 return builder.toString();
77 }
78 }