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