1

わかった。私は正式に Spring コアに不満を感じています。まず、例を挙げてみましょう。Main、Person、および Address の 3 つのクラスがあります。Main は、main メソッド (いわばドライバー) を含むクラスです。すべての人がアドレスを持っているか、機能するためにアドレスが必要であると仮定しましょう。それは依存関係です。Spring を使用して、コンストラクターまたはセッターを介してこれらの Bean を「ワイヤリング」できることを理解しています。コンストラクターでそれを行ったとしましょう。

<bean id="address" class="vail.Address" />

<bean id="person" class="vail.Person">
    <constructor-arg ref="address" />
</bean>

OK、ここで迷ってしまいます。私の調査 (主にチュートリアルによる) では、この時点から 2 つのオプションしか見たことがありません。ただし、3 番目を追加します。

  1. xml 内のアドレス定義に追加して、本質的にアドレスをハード コードします。問題 = すべての人が 123 nowhere dr に住んでいるわけではありません。
  2. アドレスクラスにハードコードします。問題 = 誰もが 123 nowhere dr に住んでいるわけではありません。
  3. (これは私の考えです) Address クラスに「street」パラメーターのセッターを追加します。Person クラスに「setStreet」メソッドを追加します。Person のインスタンス化後、Spring は私の (空の) 依存関係を注入しました。次に、通りの名前を渡して「setStreet」を呼び出します。次に、「setStreet」は、住所クラスの「street」パラメーターのセッターを呼び出します。これで、Main が知らないうちに、ようやく依存関係ができました。

これが正しい方法はありますか。Main と Address をデカップリングするのは大変な作業のようです。この問題で何か助けていただければ幸いです。

4

2 に答える 2

1

あなたの要件は非常に曖昧に見えます。Personという名前のクラスは、通常、永続化されたドメイン オブジェクトを表すために使用されます (例: メモリ、データベース、xml などに格納された人物インスタンス)。通常、人物のインスタンス属性を設定することは、「ハードコーディング」として分類されません。

依存性注入が便利なのは、多くのクラス インスタンス間で依存性/参照を管理する必要がある場合です。

たとえば、プログラムがコントローラー クラスPersonControllerを持つ Web アプリケーションであり、 PersonDAOクラスを使用するデータベースから個人インスタンスを検索するために、 Spring 構成が次のようになると仮定します。

<bean id="personDAO" class="myapp.PersonDAO"/>

<bean id="personController" class="myapp.PersonController">
  <property name="personDAO" ref="personDAO"/>
</bean>

PersonController クラス内で定型コードから解放され、PersonDAOを検索/作成する方法に注意してください。どのクラスを最初に作成し、どのクラスを参照する必要があるかを考える必要はありません。このようなことは、10 個以上のクラスがある場合に悪夢になり始めます (エンタープライズ アプリでは一般的です)。

これは、注釈ベースの自動配線も使用すると、より強力になります。

于 2013-11-05T01:48:49.243 に答える