Java 在注入对象时强制创建对象的新实例
我正在编写一个应用程序,其中定义了一个自定义组合框(我们称之为MyComboBox)。我想在两个不同的面板中分别使用它(比如APanel和BPanel)。注入层次结构如下所示: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中将不同的监听器/操作添加
BPanel has MyComboBox injected
MyWindow has BPanel injected
APanel has MyWindow AND MyComboBox injected
问题是我在BPanel中将不同的监听器/操作添加到MyComboBox,在APanel中将不同的监听器/操作添加到MyComboBox,但因为它在一次“注入狂欢”中,所以只创建了MyComboBox的一个实例,并共享所有监听器
我已经尝试将作用域从@Dependent(默认值)更改为@RequestScope,但没有帮助
我自己找到了两种解决这个问题的方法:
但是,以上两种方法都不能让我满意,我想知道是否存在一种简单而干净的方法来处理我的问题。我现在不能尝试,但是如果我正确地注释了带有
@dependent
(或没有任何注释)的MyComboBox
类,应该可以工作
无论如何,一个解决办法可能是注射
@Inject
private Instance<MyCombobox> comboxboxInstance;
Dependent是默认范围,它不起作用。我将很快试用您的解决方法。您使用的是哪个版本的CDI?
comboxboxInstance.get();