I am new to CDI, tried to find solution for this question, but, couln't found any. Question is Suppose I have one class which is being injected(A) from, where some value(toPass) is getting injected, now I want to pass this same value(toPass) to class B, which is getting injected from class A.
public class A
{
String toPass = "abcd"; // This value is not hardcoded
@Inject
private B b;
}
public class B
{
private String toPass;
public B(String toPass)
{
toPass = toPass;
}
}
Can anybody please help me in this? Note: we cannot initialize the toPass variable of B in the same way as we have initialized in A, there is some restriction to it. Basically in Spring we could have done it easily, but, I wanted to do it in CDI.
You have options:
1.
Set toPass
variable to b
from @PostConstruct
method of bean A
:
@PostConstruct
public void init() {
b.setToPass(toPass);
}
or
2.
Create producer for toPass
variable and inject it into bean A
and B
.
Producer:
@Produces
@ToPass
public String produceToPass() {
...
return toPass;
}
Injection:
@Inject
@ToPass
String toPass;
or
3.
If bean A
is not a dependent scoped bean you can use Provider
interface to obtain an instance of bean A
:
public class B
{
@Inject
Provider<A> a;
public void doSomeActionWithToPass() {
String toPass = a.get().getToPass());
...
}
But you should not use toPass from constructor or from @PostConstruct
method.