mrcode.duckprxy.impl
Class JavassistDuckPrxy
java.lang.Object
  
mrcode.duckprxy.impl.JavassistDuckPrxy
- All Implemented Interfaces: 
 - DuckPrxy
 
public class JavassistDuckPrxy
- extends java.lang.Object
- implements DuckPrxy
  
Javassist implementation of DuckPrxy.
 A new class is generated for a proxy which will delegate
 calls to the provided delegate object.
 No runtime reflection is used, making it very efficient.
 Also, it can implement classes, not just interfaces.
 However, there are some down-sides:
 
 -  Some JVMs cannot garbage collect classes. In such JVM every
 javassist duck proxy instance will leak memory.
 
 -  Javassist cannot handle inner interfaces and classes. Hence,
 javassist duck proxies cannot implement inner interfaces
 (and inner classes, but the reflection based implementation
 cannot implement classes at all).
 
 
 There are some rough edges: The proxy creator assumes that the delegate
 methods have a appropriate parameter and return types. This is not checked.
 You will probably get strange javassist or class loading exceptions
 when this assumption is not met.
 
| 
Method Summary | 
protected  void | 
addInterface(javassist.ClassPool classPool,
             javassist.CtClass ctClass,
             java.lang.Class<?> interfce,
             java.lang.Class<?> delegateClass,
             java.util.List<MethodUtils.MethodRetrieveStrategy> strategies,
             java.lang.reflect.Method subDelegateGetter)
 
            | 
protected  void | 
addMethod(javassist.ClassPool classPool,
          javassist.CtClass ctClass,
          java.lang.reflect.Method method,
          java.lang.Class<?> delegateClass,
          java.util.List<MethodUtils.MethodRetrieveStrategy> strategies,
          java.lang.reflect.Method subDelegateGetter)
 
            | 
protected  java.lang.String | 
createClassName(java.lang.Class<?> delegateClass,
                java.util.Collection<java.lang.Class<?>> interfaces)
 
            | 
protected  javassist.CtClass | 
getCtClass(javassist.ClassPool classPool,
           java.lang.Class<?> clazz)
 
            | 
protected  javassist.CtClass[] | 
getCtClass(javassist.ClassPool classPool,
           java.lang.Class<?>[] classes)
 
            | 
protected  java.lang.String | 
getDelegateCall(java.lang.String name,
                java.lang.reflect.Method delegateMethod,
                int argsLen)
 
            | 
protected  AbstractPrxyInvocationHandler.DelegateClassInformation | 
getDelegateClassInformation(java.lang.Class<?> delegateClass)
 
            | 
 DuckArg | 
getDuckArg(java.lang.annotation.Annotation[] annotations)
 
            | 
protected  java.lang.reflect.Method | 
getMethodDelegate(java.lang.reflect.Method method,
                  java.lang.Class<?> delegateClass,
                  java.util.List<MethodUtils.MethodRetrieveStrategy> strategies,
                  java.lang.reflect.Method subDelegateGetter,
                  java.lang.StringBuilder delegatePath)
 
            | 
 java.lang.Class<?> | 
getProxyClass(java.lang.String className,
              java.lang.Object delegate,
              java.lang.Class<?> delegateClass,
              java.util.List<java.lang.Class<?>> allInterfaces,
              javassist.ClassPool classPool)
 
            | 
 | 
makeProxy(java.lang.Class<T> mainInterface,
          java.lang.Object delegate,
          java.lang.Class<?>... interfaces)
 
          Creates an object that implements the defined interfaces
 delegating to a given object, mainly using duck typing. | 
protected  java.util.List<MethodUtils.MethodRetrieveStrategy> | 
makeStrategies(java.lang.Class<?> delegateClass,
               AbstractPrxyInvocationHandler.DelegateClassInformation info)
 
            | 
 
| Methods inherited from class java.lang.Object | 
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | 
 
JavassistDuckPrxy
public JavassistDuckPrxy()
JavassistDuckPrxy
public JavassistDuckPrxy(java.lang.String classNamePrefix)
- Constructor to set own class name prefix.
 Normally, you do not want to override the class name prefix.
- Parameters:
 classNamePrefix - Override value for class name prefix.
 
makeProxy
public <T> T makeProxy(java.lang.Class<T> mainInterface,
                       java.lang.Object delegate,
                       java.lang.Class<?>... interfaces)
- Description copied from interface: 
DuckPrxy 
- Creates an object that implements the defined interfaces
 delegating to a given object, mainly using duck typing.
- Specified by:
 makeProxy in interface DuckPrxy
 
- Type Parameters:
 T - The class of the main interface.- Parameters:
 mainInterface - The main interface that the resulting object
                       shall implement.delegate - The object to delegate the calls to.interfaces - Secondary interfaces to implement.
- Returns:
 - An object implementing the main interface and
                       secondary interfaces, delegating to the delegate
                       object.
 
 
 
getProxyClass
public java.lang.Class<?> getProxyClass(java.lang.String className,
                                        java.lang.Object delegate,
                                        java.lang.Class<?> delegateClass,
                                        java.util.List<java.lang.Class<?>> allInterfaces,
                                        javassist.ClassPool classPool)
                                 throws javassist.CannotCompileException,
                                        javassist.NotFoundException
 
- Throws:
 javassist.CannotCompileException
javassist.NotFoundException
 
createClassName
protected java.lang.String createClassName(java.lang.Class<?> delegateClass,
                                           java.util.Collection<java.lang.Class<?>> interfaces)
 
 
addInterface
protected void addInterface(javassist.ClassPool classPool,
                            javassist.CtClass ctClass,
                            java.lang.Class<?> interfce,
                            java.lang.Class<?> delegateClass,
                            java.util.List<MethodUtils.MethodRetrieveStrategy> strategies,
                            java.lang.reflect.Method subDelegateGetter)
                     throws javassist.NotFoundException,
                            javassist.CannotCompileException
 
- Throws:
 javassist.NotFoundException
javassist.CannotCompileException
 
addMethod
protected void addMethod(javassist.ClassPool classPool,
                         javassist.CtClass ctClass,
                         java.lang.reflect.Method method,
                         java.lang.Class<?> delegateClass,
                         java.util.List<MethodUtils.MethodRetrieveStrategy> strategies,
                         java.lang.reflect.Method subDelegateGetter)
                  throws javassist.NotFoundException,
                         javassist.CannotCompileException
 
- Throws:
 javassist.NotFoundException
javassist.CannotCompileException
 
getMethodDelegate
protected java.lang.reflect.Method getMethodDelegate(java.lang.reflect.Method method,
                                                     java.lang.Class<?> delegateClass,
                                                     java.util.List<MethodUtils.MethodRetrieveStrategy> strategies,
                                                     java.lang.reflect.Method subDelegateGetter,
                                                     java.lang.StringBuilder delegatePath)
 
 
getDelegateCall
protected java.lang.String getDelegateCall(java.lang.String name,
                                           java.lang.reflect.Method delegateMethod,
                                           int argsLen)
 
 
getDuckArg
public DuckArg getDuckArg(java.lang.annotation.Annotation[] annotations)
 
 
getCtClass
protected javassist.CtClass getCtClass(javassist.ClassPool classPool,
                                       java.lang.Class<?> clazz)
                                throws javassist.NotFoundException
 
- Throws:
 javassist.NotFoundException
 
getCtClass
protected javassist.CtClass[] getCtClass(javassist.ClassPool classPool,
                                         java.lang.Class<?>[] classes)
                                  throws javassist.NotFoundException
 
- Throws:
 javassist.NotFoundException
 
makeStrategies
protected java.util.List<MethodUtils.MethodRetrieveStrategy> makeStrategies(java.lang.Class<?> delegateClass,
                                                                            AbstractPrxyInvocationHandler.DelegateClassInformation info)
 
 
getDelegateClassInformation
protected AbstractPrxyInvocationHandler.DelegateClassInformation getDelegateClassInformation(java.lang.Class<?> delegateClass)
 
 
Copyright © 2008. All Rights Reserved.