Author: jcarman
Date: Wed Feb 27 04:10:57 2008
New Revision: 631570
URL: http://svn.apache.org/viewvc?rev=631570&view=rev
Log:
Undoing caching logic, since CGLIB includes this by default.
Modified:
commons/proper/proxy/trunk/src/main/java/org/apache/commons/proxy/factory/cglib/CglibProxyFactory.java
Modified:
commons/proper/proxy/trunk/src/main/java/org/apache/commons/proxy/factory/cglib/CglibProxyFactory.java
URL:
http://svn.apache.org/viewvc/commons/proper/proxy/trunk/src/main/java/org/apache/commons/proxy/factory/cglib/CglibProxyFactory.java?rev=631570&r1=631569&r2=631570&view=diff
==============================================================================
---
commons/proper/proxy/trunk/src/main/java/org/apache/commons/proxy/factory/cglib/CglibProxyFactory.java
(original)
+++
commons/proper/proxy/trunk/src/main/java/org/apache/commons/proxy/factory/cglib/CglibProxyFactory.java
Wed Feb 27 04:10:57 2008
@@ -21,7 +21,6 @@
import net.sf.cglib.proxy.CallbackFilter;
import net.sf.cglib.proxy.Dispatcher;
import net.sf.cglib.proxy.Enhancer;
-import net.sf.cglib.proxy.Factory;
import net.sf.cglib.proxy.MethodProxy;
import net.sf.cglib.proxy.NoOp;
import org.apache.commons.proxy.Interceptor;
@@ -29,8 +28,6 @@
import org.apache.commons.proxy.Invoker;
import org.apache.commons.proxy.ObjectProvider;
import org.apache.commons.proxy.factory.util.AbstractSubclassingProxyFactory;
-import org.apache.commons.proxy.factory.util.ProxyClassCache;
-import org.apache.commons.proxy.factory.util.ProxyClassGenerator;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
@@ -47,124 +44,93 @@
*/
public class CglibProxyFactory extends AbstractSubclassingProxyFactory
{
-//**********************************************************************************************************************
+//----------------------------------------------------------------------------------------------------------------------
// Fields
-//**********************************************************************************************************************
+//----------------------------------------------------------------------------------------------------------------------
private static CallbackFilter callbackFilter = new PublicCallbackFilter();
- private static final ProxyClassCache invokerClassCache = new
ProxyClassCache(new InvokerProxyClassGenerator());
- private static final ProxyClassCache interceptorClassCache = new
ProxyClassCache(new InterceptorProxyClassGenerator());
- private static final ProxyClassCache delegatorClassCache = new
ProxyClassCache(new DelegatorProxyClassGenerator());
-//**********************************************************************************************************************
-// Other Methods
-//**********************************************************************************************************************
-
- public Object createDelegatorProxy(ClassLoader classLoader, ObjectProvider
targetProvider,
- Class[] proxyClasses)
- {
- final Class proxyClass =
delegatorClassCache.getProxyClass(classLoader, proxyClasses);
- final Object proxy = instantiate(proxyClass);
- ((Factory) proxy).setCallbacks(new Callback[]{new
ObjectProviderDispatcher(targetProvider), NoOp.INSTANCE});
- return proxy;
- }
-
- public Object createInterceptorProxy(ClassLoader classLoader, Object
target, Interceptor interceptor,
- Class[] proxyClasses)
- {
- final Class proxyClass =
interceptorClassCache.getProxyClass(classLoader, proxyClasses);
- final Object proxy = instantiate(proxyClass);
- ((Factory) proxy).setCallbacks(new Callback[]{new
InterceptorBridge(target, interceptor), NoOp.INSTANCE});
- return proxy;
+//----------------------------------------------------------------------------------------------------------------------
+// ProxyFactory Implementation
+//----------------------------------------------------------------------------------------------------------------------
+
+ public Object createDelegatorProxy( ClassLoader classLoader,
ObjectProvider targetProvider,
+ Class[] proxyClasses )
+ {
+ final Enhancer enhancer = new Enhancer();
+ enhancer.setClassLoader( classLoader );
+ enhancer.setInterfaces( toInterfaces( proxyClasses ) );
+ enhancer.setSuperclass( getSuperclass( proxyClasses ) );
+ enhancer.setCallbackFilter( callbackFilter );
+ enhancer.setCallbacks( new Callback[]{ new ObjectProviderDispatcher(
targetProvider ), NoOp.INSTANCE } );
+ return enhancer.create();
+ }
+
+ public Object createInterceptorProxy( ClassLoader classLoader, Object
target, Interceptor interceptor,
+ Class[] proxyClasses )
+ {
+ final Enhancer enhancer = new Enhancer();
+ enhancer.setClassLoader( classLoader );
+ enhancer.setInterfaces( toInterfaces( proxyClasses ) );
+ enhancer.setSuperclass( getSuperclass( proxyClasses ) );
+ enhancer.setCallbackFilter( callbackFilter );
+ enhancer.setCallbacks( new Callback[]{ new InterceptorBridge( target,
interceptor ), NoOp.INSTANCE } );
+ return enhancer.create();
+ }
+
+ public Object createInvokerProxy( ClassLoader classLoader, Invoker invoker,
+ Class[] proxyClasses )
+ {
+ final Enhancer enhancer = new Enhancer();
+ enhancer.setClassLoader( classLoader );
+ enhancer.setInterfaces( toInterfaces( proxyClasses ) );
+ enhancer.setSuperclass( getSuperclass( proxyClasses ) );
+ enhancer.setCallbackFilter( callbackFilter );
+ enhancer.setCallbacks( new Callback[]{ new InvokerBridge( invoker ),
NoOp.INSTANCE } );
+ return enhancer.create();
}
- public Object createInvokerProxy(ClassLoader classLoader, Invoker invoker,
- Class[] proxyClasses)
- {
- final Class proxyClass = invokerClassCache.getProxyClass(classLoader,
proxyClasses);
- final Object proxy = instantiate(proxyClass);
- ((Factory) proxy).setCallbacks(new Callback[]{new
InvokerBridge(invoker), NoOp.INSTANCE});
- return proxy;
- }
-
-//**********************************************************************************************************************
+//----------------------------------------------------------------------------------------------------------------------
// Inner Classes
-//**********************************************************************************************************************
+//----------------------------------------------------------------------------------------------------------------------
- private static class DelegatorProxyClassGenerator implements
ProxyClassGenerator
+ private static class PublicCallbackFilter implements CallbackFilter
{
- public Class generateProxyClass(ClassLoader classLoader, Class[]
proxyClasses)
+ public int accept( Method method )
{
- final Enhancer enhancer = new Enhancer();
- enhancer.setClassLoader(classLoader);
- enhancer.setInterfaces(toInterfaces(proxyClasses));
- enhancer.setSuperclass(getSuperclass(proxyClasses));
- enhancer.setCallbackFilter(callbackFilter);
- enhancer.setCallbackTypes(new
Class[]{ObjectProviderDispatcher.class, NoOp.class});
- enhancer.setUseFactory(true);
- return enhancer.createClass();
+ return Modifier.isPublic( method.getModifiers() ) ? 0 : 1;
}
}
- private class InterceptorBridge implements
net.sf.cglib.proxy.MethodInterceptor
+ private class InvokerBridge implements net.sf.cglib.proxy.InvocationHandler
{
- private final Interceptor inner;
- private final Object target;
+ private final Invoker original;
- public InterceptorBridge(Object target, Interceptor inner)
+ public InvokerBridge( Invoker original )
{
- this.inner = inner;
- this.target = target;
+ this.original = original;
}
- public Object intercept(Object object, Method method, Object[] args,
MethodProxy methodProxy) throws Throwable
+ public Object invoke( Object object, Method method, Object[] objects )
throws Throwable
{
- return inner.intercept(new MethodProxyInvocation(target, method,
args, methodProxy));
+ return original.invoke( object, method, objects );
}
}
- private static class InterceptorProxyClassGenerator implements
ProxyClassGenerator
- {
- public Class generateProxyClass(ClassLoader classLoader, Class[]
proxyClasses)
- {
- final Enhancer enhancer = new Enhancer();
- enhancer.setClassLoader(classLoader);
- enhancer.setInterfaces(toInterfaces(proxyClasses));
- enhancer.setSuperclass(getSuperclass(proxyClasses));
- enhancer.setCallbackFilter(callbackFilter);
- enhancer.setCallbackTypes(new Class[]{InterceptorBridge.class,
NoOp.class});
- enhancer.setUseFactory(true);
- return enhancer.createClass();
- }
- }
-
- private class InvokerBridge implements net.sf.cglib.proxy.InvocationHandler
+ private class InterceptorBridge implements
net.sf.cglib.proxy.MethodInterceptor
{
- private final Invoker original;
-
- public InvokerBridge(Invoker original)
- {
- this.original = original;
- }
+ private final Interceptor inner;
+ private final Object target;
- public Object invoke(Object object, Method method, Object[] objects)
throws Throwable
+ public InterceptorBridge( Object target, Interceptor inner )
{
- return original.invoke(object, method, objects);
+ this.inner = inner;
+ this.target = target;
}
- }
- private static class InvokerProxyClassGenerator implements
ProxyClassGenerator
- {
- public Class generateProxyClass(ClassLoader classLoader, Class[]
proxyClasses)
+ public Object intercept( Object object, Method method, Object[] args,
MethodProxy methodProxy ) throws Throwable
{
- final Enhancer enhancer = new Enhancer();
- enhancer.setClassLoader(classLoader);
- enhancer.setInterfaces(toInterfaces(proxyClasses));
- enhancer.setSuperclass(getSuperclass(proxyClasses));
- enhancer.setCallbackFilter(callbackFilter);
- enhancer.setCallbackTypes(new Class[]{InvokerBridge.class,
NoOp.class});
- enhancer.setUseFactory(true);
- return enhancer.createClass();
+ return inner.intercept( new MethodProxyInvocation( target, method,
args, methodProxy ) );
}
}
@@ -175,7 +141,7 @@
private final Object[] args;
private final Object target;
- public MethodProxyInvocation(Object target, Method method, Object[]
args, MethodProxy methodProxy)
+ public MethodProxyInvocation( Object target, Method method, Object[]
args, MethodProxy methodProxy )
{
this.target = target;
this.method = method;
@@ -195,7 +161,7 @@
public Object proceed() throws Throwable
{
- return methodProxy.invoke(target, args);
+ return methodProxy.invoke( target, args );
}
public Object getProxy()
@@ -208,7 +174,7 @@
{
private final ObjectProvider delegateProvider;
- public ObjectProviderDispatcher(ObjectProvider delegateProvider)
+ public ObjectProviderDispatcher( ObjectProvider delegateProvider )
{
this.delegateProvider = delegateProvider;
}
@@ -216,14 +182,6 @@
public Object loadObject()
{
return delegateProvider.getObject();
- }
- }
-
- private static class PublicCallbackFilter implements CallbackFilter
- {
- public int accept(Method method)
- {
- return Modifier.isPublic(method.getModifiers()) ? 0 : 1;
}
}
}