14
我有一個singleton bean,它有一個創建原型bean實例的方法。我使用方法documented here來獲取原型bean的實例。春天 - 我如何銷燬我的原型範圍的豆子?
public class SingletonService implements ApplicationContextAware {
private ApplicationContext applicationContext;
public void go() {
MyPrototypeBean prototype = applicationContext
.getBean(MyPrototypeBean.class);
prototype.doSomething();
}
@Override
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
this.applicationContext = applicationContext;
}
}
起初我還以爲這是不夠好,那我的「原型」的情況下會走出去的範圍時,「走出去」的方法返回,這意味着該實例會不引用,並會被垃圾收集。
然而,對從the documentation指出了以下聲明:
客戶端代碼必須清理prototype作用域的對象並釋放 的bean原型(一個或多個)都拿着昂貴的資源。
所以這聽起來像Spring將保留一個參考,所以gc將永遠不會拿起它?如果是這種情況,我該如何告訴Spring發佈該參考?該文檔提到我可以使用「自定義bean後處理器」,但不清楚該處理器適合在哪裏以及它將運行什麼代碼。
感謝所有事先的幫忙, 羅伊
謝謝藝術 - 所以可以肯定地說上面的代碼是足夠的,並且不會是內存泄漏的原因? – 2011-12-23 17:42:30
好吧,這取決於MyPrototypeBean的實現,但從Spring的角度來看,它很好。 – artbristol 2011-12-23 17:47:54
爲了檢索使用getBean(..)方法的bean。我明白這樣做的性價比很高。那麼你應該如何檢索它? – rayman 2012-07-15 10:04:19