ホームページ > Java > &#&チュートリアル > Spring ではフィールド インジェクションよりもコンストラクターまたはセッター インジェクションが優先されるのはなぜですか?

Spring ではフィールド インジェクションよりもコンストラクターまたはセッター インジェクションが優先されるのはなぜですか?

DDD
リリース: 2024-12-08 01:54:12
オリジナル
284 人が閲覧しました

Why Is Constructor or Setter Injection Preferred Over Field Injection in Spring?

フィールドインジェクションとは何か、またそれが一般的に好まれない理由

Spring MVC およびポートレット アプリケーションでは、フィールド インジェクションとは、アノテーションが付けられたフィールドに依存関係を直接挿入する方法を指します。次の例で示すように、@Autowired を使用します。

@Component
public class MyComponent {
    @Autowired
    private Cart cart;
}
ログイン後にコピー

代わりに、コンストラクター インジェクションには、依存関係をコンストラクターのパラメーターとして渡すことが含まれます。

@Component
public class MyComponent {
    private final Cart cart;

    @Autowired
    public MyComponent(Cart cart) {
        this.cart = cart;
    }
}
ログイン後にコピー

利点と欠点:

コンストラクター インジェクションには、いくつかの利点があります。

  • 不変性: を作成できるようにします。インスタンス化時に依存関係が割り当てられるため、不変オブジェクト。
  • 疎結合: クラスは DI コンテナに対してより緩やかな依存関係を持ち、その外部で使用できます。
  • テスト容易性: 単体テストのためにオブジェクトをインスタンス化できます。リフレクション。

セッター注入もオプションであり、オプションまたは時間の経過とともに変更可能な依存関係を注入するためのメカニズムを提供します。

対照的に、フィールド注入にはいくつかの欠点があります。

  • 密結合: DI との密結合を作成します。コンテナ。
  • 不変性: 不変オブジェクトの作成を妨げます。
  • リフレクション要件: DI コンテナ外でのインスタンス化にはリフレクションが必要です。
  • 隠れた依存関係: 本当の依存関係は次のとおりです。インターフェイスから隠されています。
  • 依存関係が多すぎます: 過剰な依存関係の追加を奨励し、単一責任の原則に違反します。

注入ガイドライン:

春は以下を推奨しますガイドライン:

  • 必須の依存関係または不変性を実現するには、コンストラクター注入を使用します。
  • オプションまたは変更可能な依存関係には、セッター注入を使用します。
  • ほとんどの場合、フィールド注入を避けてください。

結論:

フィールド注入の欠点を考慮すると、一般的にはコンストラクターまたはセッター注入を優先することをお勧めします。フィールド注入の利便性は、その潜在的な欠点と制限によって上回られます。

以上がSpring ではフィールド インジェクションよりもコンストラクターまたはセッター インジェクションが優先されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート