Hi,
I have a case where several Seam components implement the same interface. Another loosely coupled Seam component gets injected likeso.
@Name("foo")
public class Foo implements ICommonInterface {
@In(required=false)
@Out(required=false)
private AnotherBijectedField anotherField;
@Out
private ICommonInterface commonInterface = this;
}
@Name("bar")
public class Bar implements ICommonInterface {
@In(required=false)
@Out(required=false)
private SomeBijectedField field;
@Out
private ICommonInterface commonInterface = this;
}
@Name("looselyCoupledBean")
public class LooselyCoupledBean {
@In
private ICommonInterface commonInterface;
}
The problem I see is that injected commonInterface object is not properly initialized (bijected fields are not set) because it seems I have access to the variable outjected in the context which doesn't benefit of any Seam interception goodness.
Is there an alternative in using
@Out private B b = this;
@Name("factoryManager")
public class CommonInterfaceFactory {
@In
private String commonInterfaceBeanName;
@Factory("commonInterface")
public ICommonInterface create() {
return Component.getInstance(commonInterfaceBeanName);
}
}
Then in Foo and Bar beans I need to outject commonInterfaceBeanName by reading the @Name value attribute... That works by the way.
I'd be interested to hear what others have done to tackle this issue.
Thanks,
-Guillaume