Package org.apache.tapestry5.commons.services

# Interface PlasticProxyFactory

All Superinterfaces:
  `PlasticClassListenerHub`

All Known Implementing Classes:
  `PlasticProxyFactoryImpl`

public interface PlasticProxyFactory extends PlasticClassListenerHub
A service used to create proxies of varying types. As a secondary concern, manages to identify the location of methods and constructors, which is important for exception reporting.

Since:
  5.3

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `clearCache()`
  Clears any cached information stored by the proxy factory; this is useful in Tapestry development mode when a class loader may have been discarded (because the proxy factory may indirectly keep references to classes loaded by the old class loader).
  `<T> T`
  `createProxy(Class<T> interfaceType, Class<? extends T> implementationType, ObjectCreator<T> creator, String description)`
  Creates a proxy instance that delegates all methods through a corresponding ObjectCreator.
  `<T> ClassInstantiator<T>`
  `createProxy(Class<T> interfaceType, Class<? extends T> implementationType, PlasticClassTransformer callback)`
  Same as `createProxy(interfacetype, implementationType, callback, true)`
  `<T> ClassInstantiator<T>`
  `createProxy(Class<T> interfaceType, Class<? extends T> implementationType, PlasticClassTransformer callback, boolean introduceInterface)`
  Creates a proxy object that implements the indicated interface and indicated service implementation type, then invokes the callback to further configure the proxy.
  `<T> T`
  `createProxy(Class<T> interfaceType, ObjectCreator<T> creator, String description)`
  Creates a proxy instance that delegates all methods through a corresponding ObjectCreator.
  `<T> ClassInstantiator<T>`
  `createProxy(Class<T> interfaceType, PlasticClassTransformer callback)`
  Creates a proxy object that implements the indicated interface, then invokes the callback to further configure the proxy.
  `<T> PlasticClassTransformation<T>`
  `createProxyTransformation(Class<T> interfaceType)`
  Creates the underlying `PlasticClassTransformation` for an interface proxy.
  `<T> PlasticClassTransformation<T>`
  `createProxyTransformation(Class<T> interfaceType, Class<? extends T> implementationType)`
  Creates the underlying `PlasticClassTransformation` for an interface proxy with a given implementation class.
  `ClassLoader`
  `getClassLoader()`
  Returns the class loader used when creating new classes, this is a child class loader of another class loader (usually, the thread's context class loader).
  `Location`
  `getConstructorLocation(Constructor constructor)`
  Return a string representation for the constructor (including class and parameters) and (if available) file name and line number.
  `Location`
  `getMethodLocation(Method method)`
  Converts a method to a `Location`, which includes information about the source file name and line number.
  `PlasticManager`
  `getPlasticManager()`
  Returns the PlasticManager instance used by this PlasticProxyFactory.
  `default PlasticProxyFactory`
  `getProxyFactory(String className)`
  Returns the PlasticProxyFactory instance to be used for a given class.

  ### Methods inherited from interface org.apache.tapestry5.plastic.PlasticClassListenerHub

  `addPlasticClassListener, removePlasticClassListener`

- ## Method Details

  - ### getClassLoader

    ClassLoader getClassLoader()
    Returns the class loader used when creating new classes, this is a child class loader of another class loader (usually, the thread's context class loader).

  - ### createProxy

    <T> ClassInstantiator<T> createProxy(Class<T> interfaceType, PlasticClassTransformer callback)
    Creates a proxy object that implements the indicated interface, then invokes the callback to further configure the proxy.
    Parameters:
      `interfaceType` - interface implemented by proxy
      `callback` - configures the proxy
    Returns:
      instantiator that can be used to create an instance of the proxy class

  - ### createProxy

    @IncompatibleChange(release="5.4.5", details="TAP5-2528") <T> ClassInstantiator<T> createProxy(Class<T> interfaceType, Class<? extends T> implementationType, PlasticClassTransformer callback, boolean introduceInterface)
    Creates a proxy object that implements the indicated interface and indicated service implementation type, then invokes the callback to further configure the proxy.
    Parameters:
      `interfaceType` - interface implemented by proxy
      `implementationType` - a class that implements the interfaceType. It can be null.
      `callback` - configures the proxy
    Returns:
      instantiator that can be used to create an instance of the proxy class

  - ### createProxy

    @IncompatibleChange(release="5.4", details="TAP5-2029") <T> ClassInstantiator<T> createProxy(Class<T> interfaceType, Class<? extends T> implementationType, PlasticClassTransformer callback)
    Same as `createProxy(interfacetype, implementationType, callback, true)`
    Parameters:
      `interfaceType` - interface implemented by proxy
      `implementationType` - a class that implements the interfaceType. It can be null.
      `callback` - configures the proxy
    Returns:
      instantiator that can be used to create an instance of the proxy class

  - ### createProxyTransformation

    <T> PlasticClassTransformation<T> createProxyTransformation(Class<T> interfaceType)
    Creates the underlying `PlasticClassTransformation` for an interface proxy. This should only be used in the cases where encapsulating the PlasticClass construction into a callback is not feasible (which is the case for some of the older APIs inside Tapestry IoC).
    Parameters:
      `interfaceType` - class proxy will extend from
    Returns:
      transformation from which an instantiator may be created

  - ### createProxyTransformation

    @IncompatibleChange(release="5.4", details="TAP5-2029") <T> PlasticClassTransformation<T> createProxyTransformation(Class<T> interfaceType, Class<? extends T> implementationType)
    Creates the underlying `PlasticClassTransformation` for an interface proxy with a given implementation class. This should only be used in the cases where encapsulating the PlasticClass construction into a callback is not feasible (which is the case for some of the older APIs inside Tapestry IoC).
    Parameters:
      `interfaceType` - class proxy will extend from
      `implementationType` - a class that implements the interfaceType. It can be null.
    Returns:
      transformation from which an instantiator may be created

  - ### createProxy

    <T> T createProxy(Class<T> interfaceType, ObjectCreator<T> creator, String description)
    Creates a proxy instance that delegates all methods through a corresponding ObjectCreator. Each method invocation on the proxy will route through `ObjectCreator.createObject()` (the creator implementation may decide to cache the return value as appropriate).
    Type Parameters:
      `T` - type of proxy
    Parameters:
      `interfaceType` - interface class for proxy
      `creator` - object responsible for creating the real object
      `description` - the `toString()` of the proxy
    Returns:
      proxy instance

  - ### createProxy

    @IncompatibleChange(release="5.4", details="Added for TAP5-2029") <T> T createProxy(Class<T> interfaceType, Class<? extends T> implementationType, ObjectCreator<T> creator, String description)
    Creates a proxy instance that delegates all methods through a corresponding ObjectCreator. Each method invocation on the proxy will route through `ObjectCreator.createObject()` (the creator implementation may decide to cache the return value as appropriate).
    Type Parameters:
      `T` - type of proxy
    Parameters:
      `interfaceType` - interface class for proxy
      `implementationType` - class that implements the interface type. It may be null
      `creator` - object responsible for creating the real object
      `description` - the `toString()` of the proxy
    Returns:
      proxy instance

  - ### getMethodLocation

    Location getMethodLocation(Method method)
    Converts a method to a `Location`, which includes information about the source file name and line number.
    Parameters:
      `method` - to look up
    Returns:
      the location (identifying the method and possibly, the line number within the method)

  - ### getConstructorLocation

    Location getConstructorLocation(Constructor constructor)
    Return a string representation for the constructor (including class and parameters) and (if available) file name and line number.
    Returns:
      the location (identifying the constructor and possibly, the line number within the method)

  - ### clearCache

    @IncompatibleChange(release="5.3.3", details="Added method") void clearCache()
    Clears any cached information stored by the proxy factory; this is useful in Tapestry development mode when a class loader may have been discarded (because the proxy factory may indirectly keep references to classes loaded by the old class loader).
    Since:
      5.3.3

  - ### getPlasticManager

    @IncompatibleChange(release="5.8.3", details="Added method") PlasticManager getPlasticManager()
    Returns the PlasticManager instance used by this PlasticProxyFactory.
    Since:
      5.8.3

  - ### getProxyFactory

    default PlasticProxyFactory getProxyFactory(String className)
    Returns the PlasticProxyFactory instance to be used for a given class. Default implementation returns `this`.
    Since:
      5.8.3