私は、すべて同じインターフェイスを実装するいくつかの SFSB を持つアプリケーションに取り組んでいます。
実行時にどの具体的な実装を使用するかを決定するために、次の Factory Method があります。
@SuppressWarnings("rawtypes")
@Inject @Any Instance<SFSBInterface> sfsbSource;
public <T> SFSBInterface<T> initBeanForm(Class<T> clazz, Class<? extends SFSBInterface<T>> sfsbClass, Annotation... qualifiers) {
SFSBInterface<T> sfsb = sfsbSource.select(sfsbClass, qualifiers).get();
return sfsb;
}
各具象実装には、@Remove アノテーション付きメソッドが実装されています。今、この sfsb を削除して、このメソッドを呼び出すときに新しいインスタンスを取得したい場合があります。
remove メソッドを呼び出して、このオブジェクトへのすべての参照を削除していますが、インスタンスは引き続きメモリ内に存在します。このクラスのインスタンスを要求すると、以前に削除を呼び出したのと同じインスタンスが取得されます。
私の質問は次のとおりです。
- remove メソッドを呼び出したこのインスタンスを使用すると、問題が発生しますか?
- 削除されたインスタンスがメモリに保持されるのは正常ですか?
- このインスタンスを効果的に削除するにはどうすればよいですか?
- クラスの実際の新しいインスタンスを取得するにはどうすればよいですか?
敬具クリスチャン
ところで:私はJBoss 7.1.1とWeldを使用しています