我是否需要显式释放使用CDI创建的上下文JDialog?

时间:2015-09-05 20:04:19

标签: java swing dependency-injection inversion-of-control cdi

假设MyDialog扩展javax.swing.JDialog。请考虑以下代码:

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

问题:

  • 是否需要使用CDI明确释放dialog或上述代码已经很好了?如果是这样,我需要调用哪个CDI类和方法? (考虑到用户关闭对话框后。我不再需要它了)
  • 根据代码,哪个上下文是dialog生活在哪里?

1 个答案:

答案 0 :(得分:1)

是的,您应该显式释放bean。这很重要,否则@PreDestroy之类的内容将无法正常工作。要释放bean,您可以使用以下代码:

CDI.current().destroy(dialog);

bean的范围取决于您在MyDialog上添加的注释。如果您没有在课程上放置任何CDI注释,那么它将是@Dependent范围。这意味着每次拨打.select(MyDialog.class).get()时都会获得一个新实例。