Micronautの@Singletonとは?スコープと使い方を初心者でも理解できる形で解説
生徒
「Micronautのコードを見ていると、@Singletonってよく出てくるんですが、何をしているんですか?」
先生
「@Singletonは、そのクラスが一つのインスタンスとして管理されることをMicronautに伝えるアノテーションです」
生徒
「一つだけ作られる、という意味ですか?」
先生
「そうです。アプリケーション全体で一つだけ生成され、それを使い回します」
生徒
「どういう場面で使うのか、もう少し詳しく知りたいです」
先生
「では、DIとスコープの考え方から順番に説明していきましょう」
1. MicronautにおけるDIとスコープの考え方
Micronautでは、依存性注入を使ってクラス同士のつながりを管理します。 その中で重要になるのがスコープという考え方です。 スコープとは、オブジェクトがどの範囲で、どのくらいの期間使われるかを表します。
例えば、毎回新しく作られるオブジェクトもあれば、アプリケーション全体で一つだけ使われるオブジェクトもあります。 この違いをMicronautに伝えるために、アノテーションを使ってスコープを指定します。 @Singletonは、その中でも最も基本的でよく使われるスコープです。
2. @Singletonとは何か
@Singletonは、そのクラスのインスタンスを一つだけ生成し、DIコンテナが管理することを示します。 アプリケーション起動時、または初めて使われたタイミングで生成され、その後は同じインスタンスが再利用されます。
サービスクラスや共通処理を行うクラスは、毎回新しく作る必要がありません。 そのため、@Singletonを付けることで、メモリの無駄を減らし、処理の流れも分かりやすくなります。 Micronautの公式ドキュメントでも、基本は@Singletonを使う設計が推奨されています。
3. @Singletonの基本的な使い方
@Singletonはクラスに付与するだけで利用できます。 特別な設定は不要で、Micronautが自動的にBeanとして登録します。 Java初心者でも扱いやすいのが特徴です。
import jakarta.inject.Singleton;
@Singleton
public class HelloService {
public String message() {
return "こんにちはMicronaut";
}
}
このクラスは、MicronautのDIコンテナによって一つだけ生成されます。 他のクラスから注入されても、常に同じインスタンスが使われます。
import jakarta.inject.Singleton;
@Singleton
public class HelloController {
private final HelloService helloService;
public HelloController(HelloService helloService) {
this.helloService = helloService;
}
public void execute() {
System.out.println(helloService.message());
}
}
このように、@Singleton同士を組み合わせることで、シンプルで見通しの良い構成になります。 依存関係も明確になり、コードの理解がしやすくなります。
4. @Singletonが向いているクラス
@Singletonは、状態を持たない、または共有して問題ないクラスに向いています。 例えば、計算処理、共通ユーティリティ、ビジネスロジックを担当するサービスクラスなどです。
逆に、ユーザーごとに異なる状態を持つクラスには注意が必要です。 一つのインスタンスを使い回すため、状態を持たせると予期しない動作につながる可能性があります。 初心者のうちは、なるべく状態を持たない設計を意識すると安全です。
5. 他のスコープとの違いを意識する
Micronautには@Singleton以外にもスコープが存在します。 ただし、最初の学習段階では詳細を覚える必要はありません。 まずは、アプリケーション全体で使い回すものには@Singletonを付ける、という理解で十分です。
DIとスコープの考え方を理解すると、Micronautの設計が自然に見えてきます。 クラスの役割を意識しながら@Singletonを使うことで、読みやすく保守しやすいコードが書けるようになります。
6. @Singletonを使うメリット
@Singletonを使う最大のメリットは、設計がシンプルになることです。 インスタンス管理をMicronautに任せることで、開発者は処理の内容に集中できます。
また、テストや修正もしやすくなります。 DIと@Singletonを正しく使うことで、Micronautの軽量さと高速起動の恩恵を最大限に活かすことができます。 初心者のうちは、まず@Singletonを正しく使えるようになることが大きな一歩になります。