[weld-issues] [JBoss JIRA] Created: (WELD-911) Shared dependent instance injection with circular reference through decorator

Christian Bauer (JIRA) jira-events at lists.jboss.org
Tue May 24 13:14:01 EDT 2011


Shared dependent instance injection with circular reference through decorator
-----------------------------------------------------------------------------

                 Key: WELD-911
                 URL: https://issues.jboss.org/browse/WELD-911
             Project: Weld
          Issue Type: Bug
          Components: Scopes & Contexts
    Affects Versions: 1.1.1.Final
            Reporter: Christian Bauer


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.

{code}
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();
       }
   }
}
{code}

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the weld-issues mailing list