2017-01-14 6 views
0

クライアントインスタンスを取得するには2通りの方法がありますが、どちらが優れているのかわからないのはなぜですか? enter image description here静的ブロックとSpring autowiredのどちらが優れていますか?

enter image description here

+0

あなたのユースケースが「良い」のメトリックであるかわかりません。しかし、静的とは、単一のクライアントを意味します。春の豆をプールすることができます。常に1人のユーザーがいない限り、1つのデータベース接続は必要ありません。 – duffymo

+1

StackOverflowを使用すると、質問にコードを投稿できます。コードのスクリーンショットを投稿しないでください。特に黒の背景ではありません。私はラップトップ画面をある方向に傾けて頭を動かすと、首が痛くなります。また、スクリーンショットは、右側のコード行のいずれかを切り捨てます。 – ajb

+0

Thxあなたの提案は、私はあまりにもコードをコピーしてフォーマットするのが面倒です... –

答えて

2

第二の例では、はるかに悪いです。何かをシングルトンにすることは非常に難解です。それを使用するものはすべてこの実装に結び付けられており、それとは独立して実行することはできません。

シングルトンは、アプリケーション内の何かが呼び出すことができるグローバルなハードワイヤードなので、オブジェクトは依存関係を宣言しないため、何が依存しているかを知ることは困難です。詳細については、この記事のhttp://misko.hevery.com/2008/08/17/singletons-are-pathological-liars/を参照してください。

依存性注入フレームワークは、静的な参照やサービスロケータよりもオブジェクトを接続するための優れた方法を開発者に提供するために考案されました。コードの代わりにフレームワークによって強制されるシングルトン性を持たせることで、モックを簡単に置き換えることができます。

最初の例では、ホスト名を解決しようとするコンストラクタ呼び出しと静的メソッド呼び出しは、テストをより困難にします。しかし、getClientは、テストでオーバーライドできるインスタンスメソッドです。 2番目の例は、問題がより広いために悪化します。シングルトンを使用するものはすべてテストするのが難しいです。

+0

Thxあなたの答えです。私はまた、コードでDIを使用するのが好きですが、私はしばしば他人のコードの第2の方法を見るので、私は質問があります。 –

関連する問題