如何将参数传递给CDI中另一个类的注入类?

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中完成。

A.P*_*zer 5

您可以选择:

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 。