[cdi-dev] [JBoss JIRA] (CDI-484) Provide forwarding implementations of SPI interfaces

Jozef Hartinger (JIRA) issues at jboss.org
Wed Oct 1 05:58:02 EDT 2014

Jozef Hartinger created CDI-484:

             Summary: Provide forwarding implementations of SPI interfaces
                 Key: CDI-484
                 URL: https://issues.jboss.org/browse/CDI-484
             Project: CDI Specification Issues
          Issue Type: Feature Request
          Components: Portable Extensions
    Affects Versions: 1.2.Final
            Reporter: Jozef Hartinger
             Fix For: 2.0 (discussion)

The decorator design pattern is commonly used in CDI extensions to modify existing metadata by wrapping it with a wrapper implementation that overrides certain method. This can be done in the following callbacks: ProcessAnnotatedType, ProcessProducer, ProcessInjectionTarget, ProcessInjectionPoint and ProcessBeanAttributes.

In order to do this it is often very convenient to have a forwarding implementation available, e.g.:

    void wrap(@Observes ProcessAnnotatedType<Foo> event) {
        final AnnotatedType<Foo> delegate = event.getAnnotatedType();
        event.setAnnotatedType(new ForwardingAnnotatedType<Foo>(delegate) {

            public <A extends Annotation> A getAnnotation(Class<A> annotationType) {
                return null;

            public Set<Annotation> getAnnotations() {
                return Collections.emptySet();

            public boolean isAnnotationPresent(Class<? extends Annotation> annotationType) {
                return false;

We should consider providing these utility forwarding implementations as part of the CDI API. This is similar to e.g. Servlet specification doing this for their decorable APIs (http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/http/HttpServletRequestWrapper.html)

This message was sent by Atlassian JIRA

More information about the cdi-dev mailing list