「Spring Framework」における、依存関係の注入(DI)と制御の反転(IoC)とは特徴や利点を解説

TechTargetは、Javaのオープンソースフレームワーク「Spring Framework」に関する記事を公開した。制御の反転(IoC)と依存関係の注入(DI)を中心に特徴や利点を解説する。

» 2024年11月08日 08時00分 公開
[Cameron McKenzieTechTarget]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

 TechTargetは2024年9月16日(米国時間)、Javaのオープンソースフレームワーク「Spring Framework」(以下、Spring)に関する記事を公開した。

Springにおける依存関係の注入と制御の反転(提供:TechTarget)

 Spring Frameworkをフレームワークたらしめている理由はどこにあるのだろうか。その答えが「制御の反転」(IoC:Inversion of Ccontrol)だ。

 「Spring」「Flask」「Angular」などのフレームワークでは、IoCを提供する。これが、開発者が呼び出す関数を提供するだけのライブラリとの大きな違いだ。

IoCとは?

 IoCとは1つのシンプルな設計原則で、複雑な操作(ライフサイクル管理、コンポーネント構成、システムとの低レベルの操作など)を外部化し、開発者がコアビジネスロジックを明確かつ簡潔に保てるようにする。このように外部化する要素を管理するのが、SpringやAngularなどの各種IoCフレームワークだ。

IoCのメリット

 IoCフレームワークは開発者のコードをクリーンに保つだけでなく、次のようなメリットもある。

  • コードと外部に取り出される要素が疎結合される
  • 複雑なロジックを外部の特殊なフレームワークに取り出す
  • 開発者がコア機能の実現に専念できることで、市場リリースまでの時間が短くなる

IoCと依存関係の注入の仕組み

 IoCと依存関係の注入(DI:Dependency Injection)は、通常密接に関係する。その理由を理解するため、IoCの次の2つの目的について考える。

  1. ビジネスロジックを明確かつ簡潔に保つ
  2. 外部に取り出したリソースを疎結合する

 開発者が作成したコンポーネントのライフサイクル(作成、プロビジョニング、さらにはガベージコレクションなど)を管理するのが、IoCフレームワークだ。とはいえ、Spring IoCコンテナが管理するクラスの一つにコードからアクセスする必要がある場合、どうすべきか。

 その方法の一つがSpring IoCコンテナに直接アクセスすることだ。ただし、この方法は、コードを簡潔にして疎結合するという目標に反する。IoCコンテナにアクセスするコードでアプリケーションが複雑になり、ビジネスロジックがSpringと緊密に結合される。

 ここで使われるのがDIだ。

SpringにおけるDI

 Spring IoCコンテナがアプリケーション内の2つのコンポーネントを管理し、一方のコンポーネントが他方に依存する場合は、実行時にその依存関係を満たす(DI)よう、Springに依頼する。このDIを可能にする仕組みはコードの外部で行われるため、コードは簡潔に保たれ、フレームワークによって疎結合される。

 以下の例では、@AutowiredアノテーションによってDIを実行する場所をSpring IoCコンテナに指示している。

@Component
class Taxi {
  @Autowired
  PriceMeter priceMeter;	
}
@Component
class PriceMeter {
  double price;
}

 この例では、タクシー(Taxi)は料金メーター(PriceMeter)を必要とすることが示されている。これをプログラミングのコンテキストにすると、TaxiクラスはPriceMeterクラスと依存関係があることになる。

 DIにより、この要件は実行時に解決される。つまりSpringへの直接参照はこのアノテーションだけになる。さらに、Spring XMLファイルまたはSpring @Configurationクラスを使えば、上記の@Component参照を完全に取り除くことができる。

 これが、SpringにおけるIoCとDIの基本だ。IoCとは、コードを明白かつ簡潔に保てるようにするシンプルな設計原則の一つだ。一方、DIはIoCフレームワーク(Springなど)を使って、コードへの直接参照をなくす。

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。