フィールド注入の解明: 利点と落とし穴
注入タイプの詳細
領域依存関係の注入には、依存関係を導入する主な方法が 3 つあります。 Bean: コンストラクター インジェクション、セッター インジェクション、およびフィールド インジェクション。後者では、依存関係が @Autowired を使用してフィールドに直接注入されるため、懸念が生じます。
フィールド インジェクションの欠点を明らかにする
フィールド インジェクションには、いくつかの課題があります。
-
不変性の障害:コンストラクター注入とは異なり、フィールド注入は不変オブジェクトの作成を妨げます。
-
DI コンテナーの依存関係: フィールド経由で注入されたクラスは DI コンテナーに緊密にバインドされ、外部使用が制限されます。
-
インスタンス化制約: フィールド挿入クラスではインスタンス化に DI コンテナが必要となり、ユニットが複雑になりますテスト。
-
隠蔽された依存関係: 本当の依存関係は隠されたままで、インターフェイスの明確さが損なわれます。
-
過剰な依存関係の増殖: フィールド インジェクションにより、無制限の依存関係の追加が可能になる可能性があります。単一責任に違反する原則。
さまざまな注入タイプの長所と短所
コンストラクター インジェクション
- 長所: 強制必須の依存関係、不変性の促進、真の反映
- 短所: 多数の依存関係に対する複雑なコンストラクター。
セッター インジェクション
- 長所: オプションまたは変更可能
- 短所: コンストラクターよりも冗長ですインジェクション。
フィールドインジェクション
- 長所: 書くのに便利。
- 短所: 多大な欠点 (上記を参照)。
回避と代替手段
欠点を考慮すると、フィールド注入は避けるべきです。代わりに、必須の依存関係または不変性についてはコンストラクター インジェクションを、オプションまたは変更可能な依存関係についてはセッター インジェクションを検討してください。
その他のリソース
- ブログ記事: 「フィールド依存性インジェクション」有害と考えられています"
-
春ドキュメント:
- Spring 4.2: IoC コンテナ、コンストラクターベースの依存関係注入、Setter ベースの依存関係注入
- Spring 6.0.9: IoC コンテナ、コンストラクターベースの依存関係注入、Setter-ベースの依存関係注射
以上が依存性注入におけるフィールド インジェクション: 利点、欠点、ベスト プラクティス?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。