【问题标题】:Forcing creation of new instance of object while injecting it在注入时强制创建对象的新实例
【发布时间】:2014-05-23 16:51:33
【问题描述】:

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

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

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

我已经尝试将范围从@Dependant(默认之一)更改为@RequestScoped,但没有帮助。

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

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

    MyAPanelComboBox 扩展 MyCombobox { // 这里不需要 }

    MyBPanelComboBox 扩展 MyCombobox { // 这里不需要 }

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

【问题讨论】:

  • 您使用的是哪个版本的 CDI?

标签: java ejb vaadin cdi


【解决方案1】:

我现在不能尝试,但如果我用@Dependant(或没有任何注释)注释MyComboBox 类是正确的。

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

@Inject
private Instance<MyCombobox> comboxboxInstance;

并使用

获取新实例
comboxboxInstance.get();

【讨论】:

  • Dependant 是默认范围,它不起作用。我会尽快尝试您的解决方法。
猜你喜欢
  • 2011-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多