2016-07-19 20 views
4

私は自分自身でJava依存性注入機能を使用していませんでした。そのため、いくつかのページを読んでいましたが、シングルトンと依存性注入の間の決闘についてはまだ明確ではありません。シングルトン対依存性注入

ここでは、MVCまたはMVVMパターンを使用して小さなJavaアプリケーションを作成しているとします。私はユーザー名とパスワードを要求するログインページから始めます。 これらの2つの情報は、後でアプリケーションで必要になるかもしれないので、アプリケーションの任意のビューからアクセスできる単純なPOJOにそれらの情報を格納する必要があります。

次に使用する必要があるのは?シングルトン?または、POJOのコンストラクタを@Injectorに注入し、Injectorで必要なときに取得する必要があります(Guiceと同様)。私を啓発用

感謝:)

+0

これはどちらでもない。 90%(99%?)の時間は、依存関係注入を伴うシングルトンです。 – Andreas

+0

@アンドレアスあなたは精巧にできますか? – c0der

+0

私はアンドレアスの答えもあまりにも愚かであると思っています。S – Xendar

答えて

1

POJOから依存関係が注入されてしまっています。このような状況では、ViewModelにユーザを提供/管理するシングルトンタイプのサービスが組み込まれています。現在のユーザーが必要な場合、それらのインジェクションされたサービスは、現在の関連するPOJOインスタンスを提供します。あなたのユーザ管理サービスがインタフェースにラップされているので、後で機能を破壊することなく交換することができれば、これはIoCを満たすと思います。

これは私が似たような問題に近づいてきた方法ですが、それを実行する最善の方法ではありません。

+0

私はこの点を理解しており、確かに行くための情報にアクセスするための専用サービスを実際に行っています。 サービスがあれば、必要に応じてサービス実装を挿入します。このサービス実装は、このPOJO(またはその他のもの)からユーザーデータを取得します。しかし、どのようにしてこのPOJOを「永続的」にするのですか(物理的ではありませんが、アプリケーションメモリで利用可能にしておきます)。サービス実装の基本静的インスタンス?もっと素敵なもの? – Xendar

+0

私は質問を正確に理解していますが、サービスインスタンスは1つのインスタンスだけが注入されるという点で 'シングルトン'なので、静的な必要はありません。単一のサービスインスタンス内の単一の「現在のユーザー」インスタンス。サービスは共有/シングルトンであるため、すべてのリクエストは同じサービスインスタンスから同じPOJOを受け取ります。 – Joe

+0

私が書いたことをもう一度読んで、私はちょっとばかだと感じます。私は休息が必要だと思う!しかし、愚かなquertionに返信しようとしてくれてありがとう:) – Xendar

1

シンプルなPOJOは依存性注入を介して注入するべきではありません。 リクエストごとに新しいインスタンスを作成する必要があるため、シングルトンではありません。

依存関係注入は、アプリケーションコンポーネント/サービス/リポジトリ/ beans/etcの「配線」を行うために使用する必要があります。アプリケーションのモジュール化、コンポーネント間のカプセル化を支援します。

シングルトンは、アプリケーションごとに1つのインスタンスしか存在しないオブジェクトが必要な場合です。静的インスタンスとgetInstanceメソッド(シングルトンパターンなど)を使用するか、Mainクラスまたはコンテキスト内にインスタンスを1つだけ作成することで、プログラムで実現できます。 Springでは、elseが設定されていない限り、すべてのBeanはシングルトンになります。これは、コンテキストがインスタンスを1つしか作成しないためです。

依存関係注入は、あなたが 'シングルトン'を相互に配線する必要があるときに便利になります。

十分に明確になることを願っています。