Spring Boot アプリケーションのメインクラスのコードを見てみよう
これまでのレクチャーで、Spring Boot アプリケーションを起動できました。 今回は Spring Boot アプリケーションを立ち上げるときに「実行の起点」となるクラスを見ていきます。
Spring Boot アプリケーションが起動されるときも、通常の Java のプログラムと同様に main メソッドが起点となってプログラムが実行されます。 このレクチャーでは、main メソッドにどのようなことが書かれているのかを見てみましょう。
目次
アノテーションの理解が Spring 攻略のコツ
Spring フレームワークでの開発は、ときに「アノテーションゲー」と呼ばれます(ネガティブな意味を含んでいます)。 このように呼ばれるのは、Java の言語機能であるアノテーションを多用し、アプリケーションの動作を記述していくゲームのように見えるからです。
アノテーションにはメリットとデメリットがあります:
- メリット
- アノテーションを付けるだけで望んだ動作を実現できることが多く、記述しなければいけないコード量が少なくなる
- デメリット
- アノテーションを見ただけでは、どのような動作をするのかが分かりにくい
このような背景から、Spring フレームワークで開発をする上では、アノテーションについて知識を広げることが重要になります。
main メソッドのコード
次のコードがメインメソッドのコードです。
package com.example.todo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class TodoApplication {
public static void main(String[] args) {
SpringApplication.run(TodoApplication.class, args);
}
}
このJavaのソースコードは、Spring Bootフレームワークを使用したアプリケーションの起動クラス(エントリーポイント)を定義しています。 重要なコードを解説します:
@SpringBootApplication
- Configuration クラス(設定クラス)であることを示しています。このアノテーションがついていると、auto-configuration と component scanning が実行されます。
public static void main(String[] args)
- Java プログラムのエントリーポイントです。プログラムはこのメソッドの実行から始まります。
SpringApplication.run(TodoApplication.class, args);
- これはSpringアプリケーションの起動を行うためのメソッド呼び出しです。
run
メソッドには、引数としてTodoApplication.class
が渡されています。 これによって Spring がこのクラスをアプリケーションのメインクラスとして認識し、このクラスを基にアプリケーションを設定します。 また、args
は main メソッドのコマンドライン引数をそのまま Spring アプリケーションへ渡しています。
@SpringBootApplication
アノテーションの働き
@SpringBootApplication
アノテーションについて少し詳しく見ていきます。
このアノテーションは、以下のように3つのアノテーションの合成アノテーションとして定義されています。
// .. (中略) ..
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
// // .. (中略) ..
合成されているこれら3つのアノテーションは、次のようにアプリケーションの構成や動作を制御します:
@SpringBootConfiguration
:Spring Boot の Configuration クラス(設定クラス)であることを示します。付与されたクラスがアプリケーションの主要な設定を持つことを表しています。このアノテーションは、Spring の@Configuration
を特化したものです。Spring Bootアプリケーションでは通常、メインクラスにこのアノテーションを付けます。@EnableAutoConfiguration
:Spring Boot の自動設定機能を有効にします。自動設定機能は、Spring が自動的に最適なアプリケーション設定を行うものです。例えば、クラスパスに Spring MVC がある場合、Spring Boot は Web アプリケーションとしてアプリケーションを自動設定します。@ComponentScan
:あとのレクチャーで導入する Dependency Injection に関連したアノテーションです。Spring が特定のパッケージを対象に@Component
アノテーションが付けられたクラスを見つけ出し、それらをSpringアプリケーションコンテキストに自動登録するよう指示します。
まとめ:少しずつアノテーションに触れていきましょう
このレクチャーでは、Spring Boot の起動クラスを見てきました。
@SpringBootApplication
アノテーションは、Springの設定、自動設定、コンポーネントスキャンを指示します- main メソッドはアプリケーションのエントリーポイントで、
SpringApplication.run
メソッドを通じてアプリケーションを起動します
Spring 攻略の鍵はアノテーションの理解です。 少しずつでいいので、それぞれのアノテーションが何をしているのかを理解していきましょう。