【Spring Boot】IoCコンテナとは?初心者向けにやさしく解説

Java入門・実践
スポンサーリンク
スポンサーリンク

はじめに

Spring を触っていると必ず出てくる言葉、IoCコンテナ(Inversion of Control Container)。 「DI とどう違うの?」「コンテナって何をしているの?」 そんな疑問を持つ方も多いと思います。

この記事では、IoCコンテナを やさしく・実務で役立つ形 で整理します。 まずはコードを見て、そこから少しずつ理解していきましょう。

まずはコードを確認

Java
@Service
public class GreetingService {
    public String greet() {
        return "Hello!";
    }
}

@RestController
public class HelloController {

    private final GreetingService greetingService;

    public HelloController(GreetingService greetingService) {
        this.greetingService = greetingService;
    }

    @GetMapping("/hello")
    public String hello() {
        return greetingService.greet();
    }
}

このコード、前回の DI の例と同じですが、
実はこの裏側で IoCコンテナがずっと働いています

コードのしくみを解説

IoCコンテナとは

一言でいうと、

Spring が管理する「オブジェクト置き場」 です。

もう少し丁寧に言うと、

  • オブジェクト(Bean)を作って
  • 必要なところに渡して
  • ライフサイクルも面倒を見てくれる

そんな“管理人さん”のような存在です。

IoC(制御の反転)とは

本来、オブジェクトの生成や管理は開発者が行います。 しかし Spring では、

  • どのクラスを作るか
  • いつ作るか
  • どこに渡すか

これらの“制御”を Spring 側が担当します。
これが 制御の反転(Inversion of Control) です。

DI と IoC の関係

DI は「必要なものを注入する仕組み」。 IoC は「その注入を実現するための土台」。

つまり、

DI を支えているのが IoCコンテナ という関係になります。

あわせて知っておきたいポイント

IoCコンテナが管理するもの

  • @Component
  • @Service
  • @Repository
  • @Controller / @RestController
  • @Configuration
  • @Bean で定義したもの

これらはすべて IoCコンテナの管理下に置かれます。

Bean のライフサイクル

IoCコンテナは Bean を

  • 作る
  • 初期化する
  • 必要な場所に渡す
  • 最後に破棄する

    まで面倒を見てくれます。

ApplicationContext が IoCコンテナ

Spring Boot では、
ApplicationContext が IoCコンテナの実体です。

使うときに気をつけたいこと

new で作るとコンテナ管理外になる

IoCコンテナの管理外で作ったオブジェクトにはDI が効きません。

Bean のスコープに注意

  • Singleton(デフォルト)
  • Prototype
  • Request
  • Session

用途に応じて使い分ける必要があります。

コンポーネントスキャンの範囲

パッケージ構成によっては
Bean が見つからず DI が失敗することがあります。

まとめ

IoCコンテナは、Spring の“心臓部”のような存在です。
DI を支え、Bean を管理し、アプリケーション全体を整えてくれます。

難しく聞こえますが、
「Spring がオブジェクトを管理してくれる仕組み」
と理解できれば十分です。


decopon
decopon

IoCコンテナは最初とっつきにくいですが、
「Spring が全部面倒を見てくれる箱」と思うと急に理解が進みます。
あなたの開発が、今日より少しだけ楽になりますように。

moco
moco

コンテナさんって、みんなのことを見守ってくれる管理人さんみたいだね。

コメント

タイトルとURLをコピーしました