ホームページ >Java >&#&チュートリアル >Spring 依存性注入でフィールド注入を避けるべき理由は何ですか?

Spring 依存性注入でフィールド注入を避けるべき理由は何ですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-27 14:28:10953ブラウズ

Why Should Field Injection Be Avoided in Spring Dependency Injection?

フィールド インジェクションとその弊害

フィールドの @Autowired アノテーションを介して Bean が注入されるフィールド インジェクションは、多くの場合推奨されません。これを説明するには、次の点を考慮してください。

@Component
public class MyComponent {
    @Autowired
    private Cart cart;
}

または、コンストラクターの注入では次のアプローチが使用されます。

@Component
public class MyComponent {
    private final Cart cart;

    @Autowired
    public MyComponent(Cart cart){
       this.cart = cart;
    }
}

注入テクニック

3 つの主要な依存性注入ですメソッド:

  • コンストラクター注入: コンストラクターを通じて注入されます。
  • メソッド注入: セッターまたは他のメソッドを通じて注入されます。
  • フィールド注入: を使用してフィールドに直接注入されます。

最初の例に見られるように、フィールド インジェクションは 3 番目のオプションに対応します。

インジェクション ガイドライン

Spring では、以下の注射ガイドライン:

  • 必須依存関係: コンストラクター インジェクションを使用します。
  • オプションまたは変更可能な依存関係: セッター インジェクションを使用します。
  • フィールド インジェクションを避ける: でのみ使用します。例外的なシナリオ。

欠点フィールド インジェクションの

フィールド インジェクションは、いくつかの理由から推奨されません:

  • 不変オブジェクト: コンストラクター インジェクションは、フィールド インジェクションである不変オブジェクトの作成を容易にします。
  • タイト結合: フィールド インジェクションはクラスと DI コンテナを緊密に結合するため、クラスの独立した使用が妨げられます。
  • インスタンス化の課題: リフレクションと DI コンテナがないとクラスをインスタンス化できず、単体テストが妨げられます。機能。
  • 隠された依存関係: フィールド注入により依存関係が隠蔽されるため、識別が困難になります。クラスの外部コンポーネントへの依存。
  • 複数の依存関係: フィールド挿入により、依存関係を自由に蓄積できます。
  • 責任違反: 複数の依存関係を処理するクラス責任は過度の依存関係を示すことが多く、単一責任に違反する可能性があります。原則

結論

コンストラクターとセッターのインジェクションは要件に基づいて優先順位を付ける必要があります。フィールド注入は一般に、利便性を唯一の利点として、欠点があるため避けるべきです。

以上がSpring 依存性注入でフィールド注入を避けるべき理由は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。