Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在注入对象时强制创建对象的新实例_Java_Ejb_Vaadin_Cdi - Fatal编程技术网

Java 在注入对象时强制创建对象的新实例

Java 在注入对象时强制创建对象的新实例,java,ejb,vaadin,cdi,Java,Ejb,Vaadin,Cdi,我正在编写一个应用程序,其中定义了一个自定义组合框(我们称之为MyComboBox)。我想在两个不同的面板中分别使用它(比如APanel和BPanel)。注入层次结构如下所示: BPanel has MyComboBox injected MyWindow has BPanel injected APanel has MyWindow AND MyComboBox injected 问题是我在BPanel中将不同的监听器/操作添加到MyComboBox,在APanel中将不同的监听器/操作添加

我正在编写一个应用程序,其中定义了一个自定义组合框(我们称之为MyComboBox)。我想在两个不同的面板中分别使用它(比如APanel和BPanel)。注入层次结构如下所示:

BPanel has MyComboBox injected
MyWindow has BPanel injected
APanel has MyWindow AND MyComboBox injected
问题是我在BPanel中将不同的监听器/操作添加到MyComboBox,在APanel中将不同的监听器/操作添加到MyComboBox,但因为它在一次“注入狂欢”中,所以只创建了MyComboBox的一个实例,并共享所有监听器

我已经尝试将作用域从@Dependent(默认值)更改为@RequestScope,但没有帮助

我自己找到了两种解决这个问题的方法:

  • 使用标准Java构造函数手动创建组合框
  • 使MyComboBox抽象并创建两个扩展它的类,例如:

    MyAPanelComboBox扩展了MyCombobox{ //这里什么都不需要 }

    MyBPanelComboBox扩展了MyCombobox{ //这里什么都不需要 }


  • 但是,以上两种方法都不能让我满意,我想知道是否存在一种简单而干净的方法来处理我的问题。

    我现在不能尝试,但是如果我正确地注释了带有
    @dependent
    (或没有任何注释)的
    MyComboBox
    类,应该可以工作

    无论如何,一个解决办法可能是注射

    @Inject
    private Instance<MyCombobox> comboxboxInstance;
    

    Dependent是默认范围,它不起作用。我将很快试用您的解决方法。您使用的是哪个版本的CDI?
    comboxboxInstance.get();