私は複数の画面を持つアプリケーションを持っており、各画面はボタンで選択されています。各画面にはかなり重量のあるコンポーネントが含まれているので、アクティブ化画面だけがメモリに保存されていることが重要です。他のすべてはガベージコレクションのために利用可能です。Springのメソッドインジェクションとは対照的にgetBeanの使用
アプリ接着剤のためのスプリングを使用し、現在それがgetBean()を使用して画面を切り替え:
//event handler for a specific button
public void actionPerformed(Event e) {
setScreen((Screen) applicationContext.getBean("screen1"));
}
「SCREEN1は」ボタンが押されたときに画面の新しいインスタンスが作成されたプロトタイプの豆です。また、setScreen()は、Screenへの参照がアプリケーション内で維持される唯一の場所であり、以前アクティブな画面がガベージコレクションで利用できるようになります。私はまだこれをテストしていないが、うまくいくと思う - ここにロケット科学はない!
getBean()が悪いと思われる理由について、this pageを読んだ後に問題が発生しました。getBean()への依存を取り除いているときに同じ結果を達成するためにもっと慣れ親しんだ方法があるのだろうかと思います。
私はメソッドインジェクションを見てきましたが、それはほとんど役に立たない複雑さを導入するように私に見えます。 CGLIBへの依存性を追加するというもう一つのコンセプトです。私が本当にSpringへの依存性を取り除きたいのであれば、getBean()メソッドを公開するインタフェースを導入することができます。
私の場合、getBean()とメソッド注入は唯一のオプションですか、何か逃しましたか?
もしそうなら、getBean()は本当に悪いですか?
あなたの解決策では、getbean()はfactory create()メソッド内で呼び出されます。 –
正確ではありません。これはファクトリメソッドに置き換えられましたが、上記のインターフェイスを模擬するのはアプリケーションコンテキストを模擬するよりもずっと簡単です。プラスは差し替え可能です。最終的には、Springのメソッドインジェクションhttp://static.springsource.org/spring/docs/2.5のやや簡単な実装です。x/reference/beans.html#beans-factory-lookup-method-injection – cletus
工場のcreate()メソッドはどこからそのScreenインスタンスを取得しますか? –