2015-09-05 31 views
0

假设MyDialog延伸javax.swing.JDialog。考虑以下代码:我是否需要明确发布使用CDI创建的上下文JDialog?

MyDialog dialog = CDI.current().select(MyDialog.class).get(); 
dialog.setVisible(true); 
dialog.dispose(); 

问题:

  • 是否需要显式释放dialog与CDI或者上面的代码已经是罚款?如果是这样,我需要打电话给哪一类CDI? (考虑到用户关闭对话框后,我不需要它在附近)
  • 根据代码,哪个上下文是dialog生活在?

回答

1

是的,你应该明确地释放bean。这很重要,因为否则诸如@PreDestroy将无法​​正常工作。要释放豆你可以使用此代码:

CDI.current().destroy(dialog); 

bean的范围取决于你把MyDialog注释。如果您没有在课堂上放置任何CDI注释,则其范围为@Dependent。这意味着您每次拨打.select(MyDialog.class).get()时都会得到一个新实例。

+0

即使您可能已经在您的评论中回答我的问题,无论如何我会问你这个愚蠢的问题,只是为了确保:即使'MyDialog'具有@依赖范围,并且我显示的代码在方法内部执行使用寿命短,我是否仍然需要通过调用'CDI.current()。destroy(dialog)'来释放bean? – Marcos

+0

我认为这取决于CDI的实施是否会造成某种泄漏。在我的一个应用程序中,我也没有在没有意识到的情况下释放bean,它从来没有造成任何问题。 – chkal

相关问题