0

Spring を使用するためにレガシー Java アプリケーションをリファクタリングしています。

これには、アプリケーション クラスを Spring Bean として宣言し、出現するすべてのnewcontext.getBeanOR に置き換えることが含まれDIます。

一部のクラスがシングルトンになるように、アプリケーション ロジックを書き直しています。ただし、それらは他の場所で new を使用してインスタンス化されているため、複数のコピーが存在し、ビジネス ロジックが台無しになります。予測できない方法で実行して誤動作するのではなく、オブジェクトを単独でインスタンス化しようとするたびに、アプリケーションが明示的に失敗するようにしたいと考えています。(リファクタリングがアプリケーションの 100% をカバーしているかどうかはわかりませんが、まだ隅に新しいものが潜んでいる可能性があります)

クラスがSpringコンテナによってのみインスタンス化できることを保証する最良の方法は何ですか? (クラスごとにファクトリーを書くのは避けたいと思っています)

4

1 に答える 1

4

ご質問のとおり

この特定のシナリオでは、コンテキストからフェッチされるオブジェクトのコピーが 1 つだけ存在する必要があり、複数のコピーがあるとビジネス ロジックが台無しになります。

クラシック シングルトンを作成しgetInstance()、Spring の xml ファイルの Bean 定義でファクトリ メソッドとしてメソッドを使用できます。

<bean id="myBean" class="MyClass" factory-method="getInstance"/>

コンストラクターを非公開にすると、誰もそれを呼び出すことができなくなります。さらに、古いコードの一部がnewクラスのインスタンス化に使用されている場合、コンパイル時にエラーが表示されます。

于 2013-04-01T09:44:04.350 に答える