2015-09-05 32 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

相關問題