我是 CDI 的新手,试图找到这个问题的解决方案,但找不到任何解决方案。问题是假设我有一个正在注入(inject)(A)的类,其中注入(inject)了一些值(toPass),现在我想将这个相同的值(toPass)传递给从 A 类注入(inject)的 B 类。
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;
}
}
有人可以帮我解决这个问题吗? 注意:我们不能像在A中初始化的那样初始化B的toPass变量,这是有一些限制的。基本上在 Spring 中我们可以轻松完成,但是,我想在 CDI 中完成。
最佳答案
您有以下选择:
1.
从 bean A
的 @PostConstruct
方法将 toPass
变量设置为 b
:
@PostConstruct
public void init() {
b.setToPass(toPass);
}
或
2。
为 toPass
变量创建生产者并将其注入(inject) bean A
和 B
。
制作人:
@Produces
@ToPass
public String produceToPass() {
...
return toPass;
}
注入(inject):
@Inject
@ToPass
String toPass;
或
3。
如果 bean A
不是依赖范围的 bean,您可以使用 Provider
接口(interface)获取 bean A
的实例:
public class B
{
@Inject
Provider<A> a;
public void doSomeActionWithToPass() {
String toPass = a.get().getToPass());
...
}
但是你不应该从构造函数或 @PostConstruct
方法中使用 toPass。
关于java - 如何将参数传递给 CDI 中另一个类的注入(inject)类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33052067/