Spring の ApplicationContext.getBean() が推奨されない理由
Spring で ApplicationContext.getBean() を呼び出すことは、制御の反転の原則に違反するため、不適切な方法とみなされます ( IoC).
制御と依存関係の反転インジェクション
IoC と依存関係の注入は Spring の設計の基礎です。 IoC は、オブジェクトがその依存関係を作成したり見つけたりする責任を負うべきではないという概念をカプセル化しています。代わりに、これらの依存関係は外部ソースによって提供される必要があります。
依存関係注入 (DI) は、Spring がこれらの依存関係を連携オブジェクトに自動的に注入するメカニズムです。これにより、オブジェクトが依存関係の特定の実装に依存しない疎結合が可能になります。
getBean() の問題
getBean() の呼び出しは、次の原則に直接矛盾します。
-
密結合: getBean() を呼び出すオブジェクトは Spring に密結合されています。 容器。彼らは、依存関係がどのように提供されるかを知っており、それを考慮しているため、テストやリファクタリングが困難になっています。
-
依存関係管理のバイパス: getBean() を使用すると、オブジェクトは DI メカニズムをバイパスし、直接Springコンテナにアクセスします。これにより、誤った依存関係が挿入されたり、実行時エラーが発生したりする可能性があります。
-
テスト容易性の低下: getBean() に依存するオブジェクトは、単独で簡単にテストできません。モック実装またはスタブ実装は注入できないため、これらのオブジェクトの動作のテストが困難になります。
getBean() の代替手段
開発者は getBean() を直接呼び出す代わりに、次のメソッドを使用する必要があります。アプローチ:
-
コンストラクターの注入:依存関係を引数としてコンストラクターに渡します。 Spring は、対応する Bean を自動的に挿入します。
-
Setter Injection: 連携するオブジェクトで setter メソッドを定義し、Spring の を使用します。 XML 設定のタグまたは Java の @Autowired アノテーションを使用して依存関係を指定します。
-
フィールド インジェクション: フィールド メンバーに @Autowired のアノテーションを付けますが、これは次のような問題につながる可能性があるため、注意して使用する必要があります。
これらのプラクティスに従うことで、開発者は疎結合を実現し、簡素化することができます。テストを実施し、Spring アプリケーションの堅牢性を確保します。
以上がSpring で `ApplicationContext.getBean()` を呼び出すことが悪い習慣とみなされるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。