7

私たちは新しいアプリケーションに取り組んでおり、Spring を使用したいと考えています (大学のプロジェクトです!)

新しい Spring アプリケーションを作成するとき、すべてのオブジェクトに Spring を注入する必要がありますか?

class A {
    ...
    AHelper helper = new AHelper();
    helper.doSomething();
    ...
}

class AHelper {
    public void doSomething(){}
}
  1. この場合、セッターを使用して AHelper を A に Spring 注入する必要がありますか? クラス A が 5 つのヘルパーに依存している場合、それらすべてを注入する必要がありますか? それはベスト プラクティスですか。

  2. また、クラス AHelper が AHelperHelper に依存し、それが AHelperHelperHelper に依存している場合、この依存関係チェーン全体を XML で構成する必要があります。それは私には間違っているように感じます!

4

3 に答える 3

9

私の意見では、プロジェクトの開始時に、どの種類のオブジェクトが Bean であり、どれがそうでないかを決定することが望ましいです。それは彼らの責任に基づくか、私の場合のように、それらが配置されている層に基づくことができます. このルールは、他のチーム メンバーに説明するのが非常に簡単で、プロジェクトの途中での変更や驚きを最小限に抑えます。

だから、私が通常行うこと:

  • コントローラーサービス、およびリポジトリー層は Spring Bean です。通常、それらはすべて一緒に配線されており、いくつかの Bean といくつかの通常のオブジェクト (POJO) を同時に持つのは非常に複雑です。

  • モデルエンティティは Spring Bean ではありません。モデル エンティティが単なる POJO である場合、開発は通常より簡単です。また、1 回の操作で何百ものそれらをロードし、それらがすべて Bean である場合、パフォーマンスが低下する可能性があります。

  • DTOVO ... まあ、通常は必要ありませんが、必要な場合はモデル エンティティとして扱います。

  • ユーティリティクラス。それらには次の 3 種類があります。

    • 静的メソッド クラス: 明らかに Bean であってはなりません。それはあなたを助けません。

    • 独自の種類のマップなどの単純なオブジェクト: 通常のオブジェクトのままにしておきます。

    • CsvFileConstructorなどのヘルパー: 私の意見では、これらは単なるサービスですが、 utilパッケージに入れることを好む人もいとにかく、通常は何らかの設定が必要なので (CSV の場合: エンコーディング、ベース パス、セパレータなど)、Bean にするといくつかの利点が得られます。

  • Exceptions , enums , ...: もちろん、Bean はありません。

于 2012-07-26T09:58:22.403 に答える
7

すべてのオブジェクトが注入されるプロジェクトを見たことがありますが、それは悪夢です。

次の場合、構築する可能性が高い大規模なコンポーネントを特定し、それらを Spring Bean として作成します。

  1. あなたはそれらを設定したいと思うでしょう
  2. それらにSpring AoPを使用します(例:トランザクションなど)
  3. クライアントは、これらのコンポーネントを使用してアプリケーションを再構成する可能性があります

たとえば、私の現在のプロジェクトでは、リリースのために有効/無効にしたり、他のチームが使用したり、(Spring AoP を介して) JMX を有効にする必要がある新しい大規模なコンポーネントを Spring で有効にします。

于 2012-07-26T08:22:25.657 に答える
3

すべてではない。しかし、その場合、おそらく良い考えでしょう、はい。A得られるのは、モックを注入して単体テストを行う可能性AHelperです。他にも多くのもの(セキュリティ、トランザクションの側面など)を得ることができますが、それはコンテキストとオブジェクトの種類に依存しAますAHelper

同じことがすべてのチェーンに当てはまります。ただし、XML は Spring アプリケーションを構成するための推奨される方法ではないことに注意してください。注釈は使いやすく、最小限の XML 構成ファイルを持つことができます。

于 2012-07-26T08:25:34.797 に答える