Interface InterceptionFactory<T>

Type Parameters:
T - type for which the wrapper is created

public interface InterceptionFactory<T>
InterceptionFactory allows to create a wrapper instance whose method invocations are intercepted by method interceptors and forwarded to a provided instance.

An implementation of InterceptionFactory may be obtained by calling BeanManager.createInterceptionFactory(CreationalContext, Class) to be used in the create method of a custom bean for example.

 public class MyCustomBean implements Bean<MyClass> {

     BeanManager bm;

     public MyCustomBean(BeanManager bm) {
         this.bm = bm;
     }

     public MyClass create(CreationalContext<MyClass> creationalContext) {

         InterceptionFactory<MyClass> factory = bm.createInterceptionFactory(creationalContext, MyClass.class);

         factory.configure().filterMethods(m -> m.getJavaMember().getName().equals("shouldBeTransactional")).findFirst()
                 .ifPresent(m -> m.add(new AnnotationLiteral<Transactional>() {
                 }));

         return factory.createInterceptedInstance(new MyClass());
     }
 }
 

The container must also provide a built-in bean with scope Dependent, bean type InterceptionFactory and qualifier Default that can be injected in a producer method parameter.

 @Produces
 @RequestScoped
 public MyClass produceMyClass(InterceptionFactory<MyClass> factory) {
     factory.configure().add(new AnnotationLiteral<Transactional>() {
     });
     return factory.createInterceptedInstance(new MyClass());
 }
 

Instances of this class are neither reusable nor suitable for sharing between threads.

CDI Lite implementations are not required to provide support for InterceptionFactory.

Since:
2.0
Author:
Antoine Sabot-Durand