【发布时间】:2014-03-18 11:35:03
【问题描述】:
我有一个带有 CDI/Weld 的 Java SE 应用程序(以 org.jboss.weld.environment.se.StartMain 开头)。
我正在将@Singleton bean 注入另一个 bean:
public class CdiMain {
@Inject
private MySingleton mySingleton;
public void onStart(@Observes ContainerInitialized event) {
mySingleton.printHello();
mySingleton = null;
// other long running stuff
}
}
printHello 方法之后我不需要单例 bean。什么时候销毁?
【问题讨论】:
-
我相信是你关闭容器的时候。
-
如果您的
CdiMainbean 对象引用未被以任何方式引用,CdiMain和MySingleton都将有资格被 GC 释放。 -
@LuiggiMendoza:您确定 CDI 不会为其 bean 提供引用,从而阻止 GC 释放
mySingleton实例吗? -
@jt8 因为它是
@Singleton,所以 CDI 将保持引用直到应用程序被取消部署。但这并不意味着CdiMain的引用将保持活动状态。 -
它们就像转基因生物——弗兰肯豆。