私はプロトタイプのBeanのインスタンスを作成するメソッドを持つシングルトンBeanを持っています。私はdocumented hereというメソッドを使ってプロトタイプBeanのインスタンスを取得しています。まずSpring - プロトタイプスコープの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;
}
}
私は、インスタンスが参照しないだろう、ガベージコレクトされることを意味し、「GO」メソッドが返されたときに「プロトタイプ」の私のインスタンスがスコープの外に出るであろうと、これは十分だと思いました。
しかし、ピアはthe documentationから次のステートメントを指摘:
クライアントコードは、プロトタイプ・スコープのオブジェクトをクリーンアップし、プロトタイプビーン(s)が保持されている 高価なリソースを解放しなければなりません。
だから、Springはリファレンスを保持しているようですので、gcは決してそれを拾いませんか?その場合、Springに参照を公開するように指示するにはどうすればよいですか?このドキュメントでは、「カスタムBeanポストプロセッサ」を使用できると述べていますが、そのプロセッサがどこに収まるのか、どのコードを実行するのかは明確ではありません。
手伝いのためのすべての事前のおかげで、 ロイ
ありがとうございます。上記のコードは十分であり、メモリリークの原因にはならないと言っても過言ではありませんか? –
これはMyPrototypeBeanの実装に依存しますが、Springの観点からはうまくいきます。 – artbristol
Beanを取得するには、getBean(..)メソッドを使用しました。私はそれがパフォーマンスで多くのコストだと思いました。どのようにそれを取得する必要がありますか? – rayman