Package org.apache.tapestry5.internal.services

## Interface ComponentInstantiatorSource

- All Known Implementing Classes:
    `ComponentInstantiatorSourceImpl`

      @UsesMappedConfiguration(key=java.lang.String.class,
                               value=ControlledPackageType.class)
      public interface ComponentInstantiatorSource

  Creates `Instantiator`s for components, based on component class name. This will involve transforming the component's class before it is loaded. In addition, a source acts as an event hub for `InvalidationListener`s, so that any information derived from loaded classes can be discarded and rebuilt when classes change. The strategy used is that when any class (in a controlled package) changes, the entire class loader is discarded, along with any instances derived from those classes. A new class loader is created, and then invalidation events are fired to listeners. Starting in Tapestry 5.3, the packages that are loaded are controlled by a configuration that maps package names to `ControlledPackageType`s.

- - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `boolean` | `exists​(java.lang.String className)` | Checks to see if a fully qualified class name exists.
    `void` | `forceComponentInvalidation()` | Forces invalidation logic, as if a component class on the disk had changed, forcing a reload of all pages and components.
    `Instantiator` | `getInstantiator​(java.lang.String classname)` | Given the name of a component class, provides an instantiator for that component.
    `PlasticProxyFactory` | `getProxyFactory()` | Returns a proxy factory that can be used to generate additional classes around enhanced classes, or create subclasses of enhanced classes.

- - ### Method Detail

    - #### getInstantiator

          Instantiator getInstantiator​(java.lang.String classname)

      Given the name of a component class, provides an instantiator for that component. Instantiators are cached, so repeated calls to this method with the same class name will return the same instance; however, callers should also be aware that the instantiators may lose validity after an invalidation (caused by changes to external Java class files).
      Parameters:
        `classname` - FQCN to find (and perhaps transform and load)
      Returns:
        an object which can instantiate an instance of the component

    - #### exists

          boolean exists​(java.lang.String className)

      Checks to see if a fully qualified class name exists. This method appears to exist only for testing.
      Parameters:
        `className` - name of class to check
      Returns:
        true if the class exists (there's a ".class" file), false otherwise

    - #### getProxyFactory

          PlasticProxyFactory getProxyFactory()

      Returns a proxy factory that can be used to generate additional classes around enhanced classes, or create subclasses of enhanced classes.
      Since:
        5.3

    - #### forceComponentInvalidation

          void forceComponentInvalidation()

      Forces invalidation logic, as if a component class on the disk had changed, forcing a reload of all pages and components.
      Since:
        5.3