org.jboss.seam.util
Class ProxyFactory

java.lang.Object
  extended by 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,

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

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

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

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.