Overview | Package | Class | Use | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## org.jboss.seam.util
Class ProxyFactory

    java.lang.Object
      org.jboss.seam.util.ProxyFactory

    public class ProxyFactory

extends Object

Factory of dynamic proxy classes.

This factory generates a class that extends the given super class and implements the given interfaces. The calls of the methods inherited from the super class are forwarded and then `invoke()` is called on the method handler associated with the generated class. The calls of the methods from the interfaces are also forwarded to the method handler.

For example, if the following code is executed,

     ProxyFactory f = new ProxyFactory();
     f.setSuperclass(Foo.class);
     MethodHandler mi = new MethodHandler() {
         public Object invoke(Object self, Method m, Method proceed,
                              Object[] args) throws Throwable {
             System.out.println("Name: " + m.getName());
             return proceed.invoke(self, args);  // execute the original method.
         }
     };
     f.setHandler(mi);
     f.setFilter(new MethodFilter() {
         public boolean isHandled(Method m) {
             // ignore finalize()
             return !m.getName().equals("finalize");
         }
     });
     Class c = f.createClass();
     Foo foo = (Foo)c.newInstance();

Then, the following method call will be forwarded to MethodHandler `mi` and prints a message before executing the originally called method `bar()` in `Foo`.

     foo.bar();

To change the method handler during runtime, execute the following code:

     MethodHandler mi2 = ... ;    // another handler
     ((ProxyObject)foo).setHandler(mi2);

Here is an example of method handler. It does not execute anything except invoking the original method:

     class SimpleHandler implements MethodHandler {
         public Object invoke(Object self, Method m,
                              Method proceed, Object[] args) throws Exception {
             return proceed.invoke(self, args);
         }
     }

Since:
  3.1
See Also:
  `MethodHandler`

Field Summary
`String` | `writeDirectory` If the value of this variable is not null, the class file of the generated proxy class is written under the directory specified by this variable.

Constructor Summary
`ProxyFactory()` Constructs a factory of proxy class.

Method Summary
`Object` | `create(Class[] paramTypes, Object[] args)` Creates a proxy class and returns an instance of that class.
`Class` | `createClass()` Generates a proxy class.
`protected ClassLoader` | `getClassLoader()`
`protected ProtectionDomain` | `getDomain()`
`void` | `setFilter(javassist.util.proxy.MethodFilter mf)` Sets a filter that selects the methods that will be controlled by a handler.
`void` | `setHandler(javassist.util.proxy.MethodHandler mi)` Sets the default invocation handler.
`void` | `setInterfaces(Class[] ifs)` Sets the interfaces of a proxy class.
`void` | `setSuperclass(Class clazz)` Sets the super class of a proxy class.

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Field Detail

### writeDirectory

    public String writeDirectory

  If the value of this variable is not null, the class file of the generated proxy class is written under the directory specified by this variable. For example, if the value is `"."`, then the class file is written under the current directory. This method is for debugging.

  The default value is null.

Constructor Detail

### ProxyFactory

    public ProxyFactory()

  Constructs a factory of proxy class.

Method Detail

### setSuperclass

    public void setSuperclass(Class clazz)

  Sets the super class of a proxy class.

### setInterfaces

    public void setInterfaces(Class[] ifs)

  Sets the interfaces of a proxy class.

### setFilter

    public void setFilter(javassist.util.proxy.MethodFilter mf)

  Sets a filter that selects the methods that will be controlled by a handler.

### createClass

    public Class createClass()

  Generates a proxy class.

### getClassLoader

    protected ClassLoader getClassLoader()

### getDomain

    protected ProtectionDomain getDomain()

### create

    public Object create(Class[] paramTypes,
                         Object[] args)
                  throws NoSuchMethodException,
                         IllegalArgumentException,
                         InstantiationException,
                         IllegalAccessException,
                         InvocationTargetException

  Creates a proxy class and returns an instance of that class.

  Parameters:
    `paramTypes` - parameter types for a constructor.
    `args` - arguments passed to a constructor.
  Throws:
    `NoSuchMethodException`
    `IllegalArgumentException`
    `InstantiationException`
    `IllegalAccessException`
    `InvocationTargetException`

### setHandler

    public void setHandler(javassist.util.proxy.MethodHandler mi)

  Sets the default invocation handler. This invocation handler is shared among all the instances of a proxy class unless another is explicitly specified.

Overview | Package | Class | Use | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD