Details
-
Bug
-
Resolution: Done
-
Major
-
1.1.1.Final
-
None
Description
CDI spec 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(); } } }