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

时间:2014-05-23 16:51:34

标签: java ejb vaadin cdi

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

BPanel has MyComboBox injected
MyWindow has BPanel injected
APanel has MyWindow AND MyComboBox injected

问题是我在BPanel中向MyComboBox添加了不同的侦听器/操作,并且在APanel中添加了不同的MyComboBox,但由于它在一个“注入狂欢”中,因此只创建了一个MyComboBox实例并且共享了所有侦听器。 / p>

我已经尝试过从@Dependant(默认值)到@RequestScoped的changin范围,但它没有帮助。

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

  1. 使用标准Java构造函数手动创建组合框。
  2. 使MyComboBox抽象化并创建两个扩展它的类,比如说:

    MyAPanelComboBox扩展了MyCombobox { //这里没什么需要的 }

    MyBPanelComboBox扩展了MyCombobox { //这里没什么需要的 }

  3. 上述两种情况都不能让我满意,我想知道是否存在一种简单而干净的方式来处理我的问题。

1 个答案:

答案 0 :(得分:2)

我现在无法尝试,但如果我正确地使用MyComboBox(或没有任何注释)对@Dependant类进行注释应该有效。

无论如何,一种解决方法可能是注入

@Inject
private Instance<MyCombobox> comboxboxInstance;

并使用

获取新实例
comboxboxInstance.get();