カテゴリ: Micronaut 更新日: 2026/01/19

MicronautのBeanライフサイクルとは?生成から破棄までの流れを初心者向けに徹底解説

MicronautのBeanライフサイクルとは?生成から破棄までの流れを解説
MicronautのBeanライフサイクルとは?生成から破棄までの流れを解説

先生と生徒の会話形式で理解しよう

生徒

「MicronautのBeanって、いつ作られて、いつ消えるんですか?」

先生

「Micronautでは、Beanには決まったライフサイクルがあります。生成から破棄までの流れを理解すると、DIの動きが分かりやすくなります。」

生徒

「Springみたいに勝手に管理されている感じですか?」

先生

「似ていますが、Micronautはコンパイル時に多くの処理を済ませるので、流れがとてもシンプルです。」

生徒

「初心者でも理解できますか?」

先生

「段階ごとに見ていけば大丈夫です。まずはBeanがどのように生まれるのかから見ていきましょう。」

1. MicronautにおけるBeanとは何か

1. MicronautにおけるBeanとは何か
1. MicronautにおけるBeanとは何か

MicronautにおけるBeanとは、DIコンテナによって管理されるオブジェクトのことです。 Javaのクラスに特定のアノテーションを付けることで、そのクラスはBeanとして登録されます。 開発者が自分でnewを使って生成するのではなく、フレームワークが生成と管理を担当します。

Beanを使うことで、クラス同士の依存関係が整理され、コードの見通しが良くなります。 Micronautでは、このBean管理が軽量かつ高速に行われる点が大きな特徴です。

2. Beanライフサイクル全体の流れ

2. Beanライフサイクル全体の流れ
2. Beanライフサイクル全体の流れ

Beanライフサイクルとは、Beanが生成されてから破棄されるまでの一連の流れを指します。 Micronautでは、主に生成、依存性注入、初期化、利用、破棄という段階に分かれます。 それぞれの段階で、フレームワークが自動的に処理を行います。

この流れを理解することで、どのタイミングで処理を書けばよいのかが明確になります。 初心者にとっては、Beanが常に生き続けているわけではないという点を意識することが大切です。

3. Beanの生成タイミング

3. Beanの生成タイミング
3. Beanの生成タイミング

Micronautでは、Beanの生成タイミングはスコープによって異なります。 最もよく使われるSingletonの場合、アプリケーション起動時に生成されることが一般的です。 ただし、必要になるまで生成されない遅延生成もサポートされています。


import jakarta.inject.Singleton;

@Singleton
public class UserService {

    public UserService() {
        System.out.println("UserServiceが生成されました");
    }
}

このクラスは、DIコンテナが起動する際に生成されます。 開発者が意識しなくても、Micronautが自動的に管理します。

4. 依存性注入が行われる流れ

4. 依存性注入が行われる流れ
4. 依存性注入が行われる流れ

Beanが生成されると、次に依存性注入が行われます。 これは、そのBeanが必要とする他のBeanを自動的に設定する処理です。 コンストラクタやフィールドに指定された依存関係が解決されます。


import jakarta.inject.Singleton;

@Singleton
public class UserController {

    private final UserService userService;

    public UserController(UserService userService) {
        this.userService = userService;
    }
}

この例では、UserControllerが生成される際にUserServiceが注入されます。 依存関係はコンパイル時に解析されているため、実行時の負荷が少なくなります。

5. 初期化処理のタイミング

5. 初期化処理のタイミング
5. 初期化処理のタイミング

依存性注入が完了すると、Beanは初期化段階に入ります。 初期化処理とは、Beanが利用可能になる前に一度だけ実行したい処理のことです。 設定値の確認やリソースの準備などが代表的な例です。


import jakarta.annotation.PostConstruct;
import jakarta.inject.Singleton;

@Singleton
public class InitSample {

    @PostConstruct
    public void setup() {
        System.out.println("初期化処理が実行されました");
    }
}

PostConstructを使うことで、Beanが完全に準備された後に処理を実行できます。 このタイミングを理解しておくと、初期化コードの置き場所に迷わなくなります。

6. Beanの利用と管理

6. Beanの利用と管理
6. Beanの利用と管理

初期化が終わったBeanは、アプリケーション内で自由に利用されます。 同じSingleton Beanは複数のクラスから共有されます。 Micronautは、どこで使われているかを把握した上で管理を行います。

開発者はBeanの存在を意識しすぎる必要はありません。 必要な場所で依存性注入を指定するだけで、適切なインスタンスが提供されます。

7. Beanの破棄と終了処理

7. Beanの破棄と終了処理
7. Beanの破棄と終了処理

アプリケーションが終了すると、Beanは破棄されます。 破棄の際には、後片付けの処理を行うことができます。 データベース接続のクローズやリソース解放などが代表的な用途です。


import jakarta.annotation.PreDestroy;
import jakarta.inject.Singleton;

@Singleton
public class DestroySample {

    @PreDestroy
    public void cleanup() {
        System.out.println("終了処理が実行されました");
    }
}

PreDestroyを使うことで、Beanが破棄される直前に処理を実行できます。 ライフサイクルの最後を理解することで、安全なリソース管理が可能になります。

8. Beanライフサイクルを理解するメリット

8. Beanライフサイクルを理解するメリット
8. Beanライフサイクルを理解するメリット

Beanライフサイクルを理解すると、MicronautのDIがどのように動作しているかが明確になります。 生成、初期化、破棄のタイミングを意識することで、バグの少ない設計が可能になります。

初心者のうちは、Singleton Beanを中心に学習すると全体像をつかみやすくなります。 これを理解することが、Micronautでのアプリケーション開発の土台になります。

関連記事:
カテゴリの一覧へ
新着記事
New1
Quarkus
Quarkusのフォーム認証を基礎から解説!初心者向けセキュリティ入門ガイド
New2
Micronaut
MicronautプロジェクトをGradleで管理する基礎!build.gradleの役割を解説
New3
Micronaut
LinuxでMicronautをセットアップする方法!パッケージ管理とGradle連携
New4
Java
Javaのswitch文を徹底解説!case・defaultの書き方と実例まとめ
人気記事
No.1
Java&Spring記事人気No1
Quarkus
Quarkusプロジェクト構成の基本を完全解説!初心者でも迷わない「どこに何を書くか」ガイド
No.2
Java&Spring記事人気No2
Quarkus
QuarkusとMicronautとHelidonを徹底比較!軽量Javaフレームワークの違いを初心者向けに解説
No.3
Java&Spring記事人気No3
Quarkus
Quarkusのセキュリティ基礎を初心者でもわかるように解説!
No.4
Java&Spring記事人気No4
Micronaut
MicronautとSpring Bootの違いとは?アーキテクチャ比較で速さの秘密を理解する
No.5
Java&Spring記事人気No5
Quarkus
Quarkusでマイクロサービス開発が加速する理由を徹底解説!Java初心者でも分かるクラウドネイティブ
No.6
Java&Spring記事人気No6
Quarkus
Quarkusの開発環境構築で躓きやすいポイントを完全解説!初心者でも安心して始めるためのチェックガイド
No.7
Java&Spring記事人気No7
Micronaut
Micronautのアプリケーション起動が速い理由を初心者向けに解説
No.8
Java&Spring記事人気No8
Micronaut
MicronautのAOPが高速な理由とは?コンパイル時AOPの仕組みを初心者向けに徹底解説