Micronautのアノテーション一覧!@Singleton・@Injectの基本を初心者向けにやさしく解説
生徒
「Micronautではアノテーションをたくさん使うと聞いたんですが、何のために使うんですか?」
先生
「Micronautでは、アノテーションを使ってDIやクラスの役割を指定します。設定ファイルを書かなくても、コードだけで動作を決められるのが特徴です。」
生徒
「@Singletonとか@Injectってよく見ますが、違いが分かりません」
先生
「@Singletonは管理対象のクラスを定義するため、@Injectはそれを利用するために使います。順番に整理すると理解しやすいですよ。」
生徒
「初心者でも使いこなせますか?」
先生
「基本のアノテーションから覚えれば大丈夫です。まずは代表的なものを見ていきましょう。」
1. Micronautにおけるアノテーションの役割
Micronautでは、アノテーションがフレームワークの動作を決める重要な役割を持っています。 Javaアノテーションを使うことで、クラスやメソッドがどのように扱われるかを明示できます。 これにより、XML設定ファイルを書く必要がほとんどなくなり、コードを読むだけで構成が理解しやすくなります。
特にDIと呼ばれる依存性注入では、アノテーションが中心的な存在です。 Micronautはコンパイル時にアノテーションを解析するため、実行時の負荷が少なく、高速に動作します。 初心者にとっても、アノテーションの意味を理解すれば、仕組みを直感的に把握できます。
2. @Singletonアノテーションの基本
@Singletonは、Micronautで最も基本的なアノテーションの一つです。 このアノテーションを付けたクラスは、DIコンテナによって管理されるBeanになります。 Singletonという名前の通り、アプリケーション全体で一つのインスタンスだけが作成され、再利用されます。
サービスクラスや共通処理を担当するクラスに付けることが多く、状態を持たない処理に向いています。 初心者はまず、ビジネスロジックを持つクラスに@Singletonを付けると覚えておくと分かりやすいです。
import jakarta.inject.Singleton;
@Singleton
public class TimeService {
public String now() {
return "現在時刻を返す処理";
}
}
この例では、TimeServiceクラスがSingletonとして管理されます。 アプリケーション内のどこから呼び出しても、同じインスタンスが利用されます。 開発者は生成タイミングや管理方法を意識する必要がありません。
3. @Injectアノテーションの基本
@Injectは、DIを利用するためのアノテーションです。 すでに定義されているBeanを、別のクラスで使いたいときに指定します。 Micronautでは、フィールド、コンストラクタ、メソッドなどに@Injectを付けることができます。
特に推奨されているのがコンストラクタインジェクションです。 依存関係が明確になり、テストしやすいコードを書くことができます。
import jakarta.inject.Inject;
import jakarta.inject.Singleton;
@Singleton
public class SampleController {
private final TimeService timeService;
@Inject
public SampleController(TimeService timeService) {
this.timeService = timeService;
}
public void execute() {
System.out.println(timeService.now());
}
}
このコードでは、SampleControllerがTimeServiceに依存しています。 @Injectによって、Micronautが自動的にTimeServiceのインスタンスを渡します。 newを使わずに利用できる点がDIの大きな特徴です。
4. フィールドインジェクションとの違い
@Injectはフィールドにも付けることができます。 ただし、初心者のうちはコンストラクタインジェクションを理解することが重要です。 フィールドインジェクションは記述が簡単ですが、依存関係が見えにくくなる欠点があります。
import jakarta.inject.Inject;
import jakarta.inject.Singleton;
@Singleton
public class FieldSample {
@Inject
TimeService timeService;
public void execute() {
System.out.println(timeService.now());
}
}
この書き方でも動作しますが、依存関係がコード上で分かりにくくなります。 学習段階では、なぜコンストラクタインジェクションが推奨されるのかを意識することが大切です。
5. よく使われるDI関連アノテーション
Micronautには、@Singletonと@Inject以外にもDIに関連するアノテーションがあります。 例えば、Beanのスコープを細かく制御するものや、条件付きで有効になるものがあります。 ただし、最初の段階では基本の二つを確実に理解することが重要です。
アノテーションを使うことで、設定よりもコードを中心とした開発スタイルになります。 Javaでの開発経験があれば、自然な形でMicronautに慣れていくことができます。
6. アノテーションを理解するメリット
Micronautのアノテーションを理解すると、アプリケーション全体の構造が見えやすくなります。 どのクラスが管理対象で、どこで利用されているのかが一目で分かります。 これは、保守や拡張を行う際に大きな強みとなります。
初心者のうちは、まず@Singletonと@Injectを使った小さなサンプルを作り、動きを確認するのがおすすめです。 その積み重ねが、MicronautのDIとアノテーション開発への理解につながります。