JBoss API: Class Proxies

org.jboss.proxy
Class Proxies

java.lang.Object
  |
  +--org.jboss.proxy.Proxies

public final class Proxies
extends java.lang.Object

Routines for converting between strongly-typed interfaces and generic InvocationHandler objects.


Inner Class Summary
static interface Proxies.ProxyInvocationHandler
          A common interface shared by all objects created by Proxies.newInvocationHandler.
static interface Proxies.ProxyTarget
          A common interface shared by all objects created by Proxies.newTarget.
 
Method Summary
static InvocationHandler getInvocationHandler(java.lang.Object target, java.lang.Class targetType)
           
static InvocationHandler getInvocationHandler(java.lang.Object target, java.lang.Class[] targetTypes)
          Utility built on top of newInvocationHandler to find or create a proxy for the given target object.
static java.lang.reflect.Method[] getMethods(java.lang.Class targetType)
          Utility which reports the set of valid methods for a target type.
static java.lang.reflect.Method[] getMethods(java.lang.Class[] targetTypes)
           
static java.lang.Object getTarget(InvocationHandler InvocationHandler)
          Utility built on top of newTarget to find or create a proxy for the given InvocationHandler.
static Proxies.ProxyInvocationHandler newInvocationHandler(java.lang.Object target, java.lang.Class targetType)
          Create a new reflective InvocationHandler object InvocationHandler wrapped around the given target object, for the given target type(s).
static Proxies.ProxyInvocationHandler newInvocationHandler(java.lang.Object target, java.lang.Class[] targetTypes)
           
static Proxies.ProxyTarget newTarget(java.lang.ClassLoader parent, InvocationHandler InvocationHandler, java.lang.Class[] targetTypes)
          Create a new target object x which is a proxy for the given InvocationHandler disp.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Method Detail

newTarget

public static Proxies.ProxyTarget newTarget(java.lang.ClassLoader parent,
                                            InvocationHandler InvocationHandler,
                                            java.lang.Class[] targetTypes)
Create a new target object x which is a proxy for the given InvocationHandler disp. The new object will be equivalent to disp, except that it will support normal Java method invocation, in place of the InvocationHandler.invoke protocol, for each method supported by the InvocationHandler.

The new object will implement each of the given target types. (The target types default to those declared by the InvocationHandler itself.) The new object will also implement the "administrative" interface Proxies.ProxyTarget.

For each "overrideable" (public, non-static, non-final) method T.m of T, calling x.m(...) will immediately cause a corresponding reflective call of the form disp.invoke(RM, new Object[]{ ... }), where RM is the reflective object for m.

The concrete class of this target object will be something mysterious and indefinite. Many callers will immediately cast the resulting proxy object to the target type of the InvocationHandler. For example: MyInterface x1 = ...; InvocationHandler i = Proxies.newInvocationHandler(x1, MyInterface.class); MyInterface x2 = (MyInterface) ((Proxies.ProxyInvocationHandler)i).getTarget(); // x1 == x2 MyInterface x3 = (MyInterface) Proxies.newTarget(i); // x1 != x3, but calls to x3 are forwarded via i to x1


newInvocationHandler

public static Proxies.ProxyInvocationHandler newInvocationHandler(java.lang.Object target,
                                                                  java.lang.Class targetType)
Create a new reflective InvocationHandler object InvocationHandler wrapped around the given target object, for the given target type(s).

The new object will be operationally equivalent to target, except that it will support a reflective method invocation sequence (InvocationHandler.invoke) instead of the normal Java method invocation mechanism.

The target type must be specified, since the complete implementation type of the target object is usually irrelevant to the application. The target object must match the specified target type. For example: MyInterface x1 = ...; InvocationHandler i = Proxies.newInvocationHandler(x1, MyInterface.class);


newInvocationHandler

public static Proxies.ProxyInvocationHandler newInvocationHandler(java.lang.Object target,
                                                                  java.lang.Class[] targetTypes)

getTarget

public static java.lang.Object getTarget(InvocationHandler InvocationHandler)
Utility built on top of newTarget to find or create a proxy for the given InvocationHandler. It is the inverse of getInvocationHandler.

If the InvocationHandler implements ProxyInvocationHandler, it is a proxy for some original target object; extract and return that object. Otherwise, just call newTarget.


getInvocationHandler

public static InvocationHandler getInvocationHandler(java.lang.Object target,
                                                     java.lang.Class[] targetTypes)
Utility built on top of newInvocationHandler to find or create a proxy for the given target object. It is the inverse of getTarget.

If the target implements ProxyTarget, it is a proxy for some original InvocationHandler; extract and return that InvocationHandler. Otherwise, just call newInvocationHandler.

See Also:
newInvocationHandler(java.lang.Object, java.lang.Class)

getInvocationHandler

public static InvocationHandler getInvocationHandler(java.lang.Object target,
                                                     java.lang.Class targetType)

getMethods

public static java.lang.reflect.Method[] getMethods(java.lang.Class targetType)
Utility which reports the set of valid methods for a target type. It is exactly the set of public, abstract methods returned by targetType.getMethods(), which are neither static nor final.

Also, if the targetType is not a suitable type, an empty array will be returned. The target type must not contain protected abstract methods, must have a nullary constructor, and must not be something silly like an array or primitive type, or a final class.


getMethods

public static java.lang.reflect.Method[] getMethods(java.lang.Class[] targetTypes)


Copyright © 2000 The JBoss Organization. All Rights Reserved.