[cdi-dev] Shared dependent instance injection with circular reference through decorator

Christian Bauer christian.bauer at gmail.com
Tue May 24 12:54:18 EDT 2011


Section 6.4 says about @Dependent that "No injected instance of the
bean is ever shared between multiple injection points."

The following test shows that the same instance of @Dependent Foo is
shared between multiple injection points, one in
TestDecoratorInjection, the other in BarDecorator.

import org.jboss.weld.environment.se.Weld;
import org.jboss.weld.environment.se.WeldContainer;

import javax.annotation.PostConstruct;
import javax.decorator.Decorator;
import javax.decorator.Delegate;
import javax.enterprise.inject.Any;
import javax.inject.Inject;
import javax.inject.Singleton;

@Singleton
public class TestDecoratorInjection {

    public static final Weld weld = new Weld();
    public static final WeldContainer weldContainer = weld.initialize();

    public static void main(final String[] args) throws Exception {
        weldContainer.instance().select(TestDecoratorInjection.class).get().test();
    }

    @Inject
    Foo foo; // Dependent instance of TestDecoratorInjection

    void test() {
        foo.test();
    }

    public static class Foo {

        @PostConstruct
        void init() {
            System.out.println("INIT FOO");
        }

        @Inject
        Bar bar; // Dependent instance of Foo

        void print() {
            System.out.println("FOO");
        }

        void test() {
            bar.print();
        }
    }

    public static interface Bar {
        void print();
    }

    public static class BarImpl implements Bar {
        @Override
        public void print() {
            System.out.println("Bar");
        }
    }

    @Decorator
    public static abstract class BarDecorator implements Bar {

        @Inject
        @Delegate
        @Any
        Bar delegate;

        @Inject
        Foo foo; // Dependent instance of what?!

        @Override
        public void print() {
            foo.print();
        }
    }
}


More information about the cdi-dev mailing list