Class CdiSpiDecorator

java.lang.Object
org.eclipse.jetty.cdi.CdiSpiDecorator
All Implemented Interfaces:
Decorator

public class CdiSpiDecorator extends Object implements Decorator
A Decorator that invokes the CDI provider within a webapp to decorate objects created by the contexts DecoratedObjectFactory (typically Listeners, Filters and Servlets). The CDI provider is invoked using MethodHandles to avoid any CDI instance or dependencies within the server scope. The code invoked is equivalent to:
 public <T> T decorate(T o)
 {
   BeanManager manager = CDI.current().getBeanManager();
   manager.createInjectionTarget(manager.createAnnotatedType((Class<T>)o.getClass()))
     .inject(o,manager.createCreationalContext(null));
   return o;
 }
 
  • Field Details

  • Constructor Details

  • Method Details

    • isDecoratable

      protected boolean isDecoratable(Class<?> clazz)
      Test if a class can be decorated. The default implementation checks the set from getUndecoratable() on the class and all it's super classes.
      Parameters:
      clazz - The class to check
      Returns:
      True if the class and all it's super classes can be decorated
    • getUndecoratable

      public Set<String> getUndecoratable()
      Get the set of classes that will not be decorated. The default set includes the listener from Weld that will itself setup decoration.
      Returns:
      The modifiable set of class names that will not be decorated (ie isDecoratable(Class) will return false.
      See Also:
    • setUndecoratable

      public void setUndecoratable(Set<String> classnames)
      Parameters:
      classnames - The set of class names that will not be decorated.
      See Also:
    • addUndecoratable

      public void addUndecoratable(String... classname)
      Parameters:
      classname - A class name that will be added to the undecoratable classes set.
      See Also:
    • decorate

      public <T> T decorate(T o)
      Decorate an object.

      The signature of this method must match what is introspected for by the Jetty DecoratingListener class. It is invoked dynamically.

      Specified by:
      decorate in interface Decorator
      Type Parameters:
      T - The type of the object to be decorated
      Parameters:
      o - The object to be decorated
      Returns:
      The decorated object
    • destroy

      public void destroy(Object o)
      Destroy a decorated object.

      The signature of this method must match what is introspected for by the Jetty DecoratingListener class. It is invoked dynamically.

      Specified by:
      destroy in interface Decorator
      Parameters:
      o - The object to be destroyed