Kri*_*mar 5 java dependency-injection inject parameter-passing cdi
我是CDI的新手,曾试图找到此问题的解决方案,但没有发现任何问题。问题是,假设我有一个正在注入的类(A),正在注入一些值(toPass),现在我想将此相同的值(toPass)传递给B类,而B类是从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;
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮我吗?注意:我们无法以与在A中初始化相同的方式来初始化B的toPass变量,对此有一些限制。基本上在春季,我们可以轻松做到这一点,但我想在CDI中完成。
您可以选择:
1.将toPass变量设置为bfrom @PostConstructbean方法A:
@PostConstruct
public void init() {
b.setToPass(toPass);
}
Run Code Online (Sandbox Code Playgroud)
要么
2.为toPass变量创建生产者,并将其注入bean A和中B。
制片人:
@Produces
@ToPass
public String produceToPass() {
...
return toPass;
}
Run Code Online (Sandbox Code Playgroud)
注射:
@Inject
@ToPass
String toPass;
Run Code Online (Sandbox Code Playgroud)
要么
3.如果bean A不是从属作用域bean,则可以使用Providerinterface获取bean的实例A:
public class B
{
@Inject
Provider<A> a;
public void doSomeActionWithToPass() {
String toPass = a.get().getToPass());
...
}
Run Code Online (Sandbox Code Playgroud)
但是,您不应从构造函数或@PostConstruct方法中使用toPass 。