java - 如何将参数传递给 CDI 中另一个类的注入(inject)类?

标签 java dependency-injection parameter-passing cdi inject

我是 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 AB

制作人:

@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/

相关文章:

exception - 资源注释 : No qualifying bean of type [javax. sql.DataSource] 已定义:预期单个匹配 bean 但找到 2

python - 函数参数 Python 的多个默认值

java - 将 Java 引用传递到对象链的最佳方式

javascript - AngularJS - 注入(inject)提供者

angularjs - 如何向 Meanjs 模块注入(inject)依赖?

java - 在 Spring Boot 数据休息应用程序中获取 EntityManager

java - 需要廉价虚拟主机的 Java 开发人员的好选择

javascript - 使用串联和传递的参数循环遍历数组

Java Debugger 运行应用程序而不会中断

java - Java 的 Stackify 前缀