ダウンロード サンプルファイル (68.0 KB)
前回までは、Spring Bootの使い方を中心に説明してきましたが、最終回である今回は、Spring Bootの内部の仕組みを紹介します。Spring Bootを使っていると、便利ではあるものの、必要な設定がどこでどのように行われているか疑問に思うことがあります。既存の設定をカスタマイズして変えたい場合には特にそのように思うことでしょう。各種ライブラリの設定を自動で行う設定機能はSpring Bootにとって大きな特徴であり、Spring Boot自体を理解するのに大いに役立つはずです。
自動設定を体験する
ここでは、Spring Bootの自動設定機能(AutoConfiguration)を体験するために、筆者がよく利用するGsonというライブラリを使います。例えば、リスト1のコードを記述してみます。
@SpringBootApplication
public class SampleApplication {
private static final Logger log = LoggerFactory.getLogger(SampleApplication.class);
@Autowired
Gson gson; // (1) 自動でGsonオブジェクトを設定する
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(SampleApplication.class,args);
SampleApplication app = context.getBean(SampleApplication.class);
app.start(context);
}
public void start(ApplicationContext context){
log.info("gson : {} ",gson); // (2) 作成されたオブジェクトがあるか確認する
: (省略)
}
}
(1)でGsonオブジェクトを@Autowired機能を使って自動でオブジェクトを設定します。そして(2)で作成されたオブジェクトがあるか確認します。
実際に実行した結果がリスト2です。
2019-11-20 17:27:16.313 INFO 63974 --- [ main] c.c.springboot.main.SampleApplication : Starting SampleApplication on masak.local with PID 63974 (/Users/musvia/vmshare/codezine/springboot-starter-samle/build/classes/java/main started by musvia in /Users/musvia/vmshare/codezine/springboot-starter-samle) 2019-11-20 17:27:16.315 INFO 63974 --- [ main] c.c.springboot.main.SampleApplication : No active profile set, falling back to default profiles: default 2019-11-20 17:27:16.664 INFO 63974 --- [ main] c.c.springboot.main.SampleApplication : Started SampleApplication in 0.652 seconds (JVM running for 0.987) 2019-11-20 17:27:16.665 INFO 63974 --- [ main] c.c.springboot.main.SampleApplication : gson : class com.google.gson.Gson
しかし、サンプルコードではGsonオブジェクトをどのように作成するかわかるコードは1行も記述していません。
そこで、以下の疑問が生じるはずです。
- Gsonオブジェクトの作成方法はどこで指定されているのか
- Gsonオブジェクトの作成方法をカスタマイズしたい場合にはどうすればよいのか
- 設定ファイルでどこまで指定ができるのか
- Gsonを使わないプログラムの場合にはどうなるのか
- どのライブラリがSpring Bootで対応しているのか
- 独自の自動設定クラスを作るにはどうすればよいのか
これらの疑問はSpring Bootの自動設定(Autoconfigure)を理解すれば解消できます。
自動設定機能(Autoconfigure)の概要
Spring Bootのアプリケーションを起動する場合には、SpringApplicationクラスを通じて実行しています。
このクラス内ではさまざまな処理を行っていますが、自動設定に関連する処理に着目し関連するクラスの関係を示したものが図1です。
- (1)SpringApplicationは@EnableAutoConfiguraionアノテーションで自動設定を有効にします。
- (2)@EnableAutoConfigurationの@Importアノテーションで、自動設定を行うクラスであるAutoConfigurationImportSelectorクラスを指定しています。
- (3)AutoConfigurationImportSelectorクラス内で、SpringFactoriesLoaderクラスを利用してMETA-INF/spring.factoriesファイルを参照します。
- (4)META-INF/spring.factoriesに記述してあるorg.springframework.boot.autoconfigure.EnableAutoConfigurationの値に各種ライブラリの設定クラスを読みます。
また、実際のspring.factoriesのファイルの内容がリスト3です。
# Auto Configure org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\ org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\ org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\ org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\ org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\ // (省略) org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration,\ org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration,\ // (省略)
このファイルを見るとさまざまなライブラリ向けの設定ファイルクラスを指定していることがわかります。つまり、これらのクラスが初期状態でSpring Bootが対応しているライブラリやフレームワークということになります。
そして、その記述の中にGsonAutoConfigurationというクラスの指定があり、そのコードを参照するとGsonオブジェクトを作成していることがわかります。
また、これらのクラスでどのような@Beanが作成されているかはSpring Reference Documentなどを参照することでもわかります。
この記事は参考になりましたか?
- Spring Bootで作るマイクロサービス連載記事一覧
-
- Spring Bootの自動設定の仕組みを理解する
- Spring BootでWebセキュリティを設定しよう
- Spring Bootでバックエンドシステムを作成しよう
- この記事の著者
-
WINGSプロジェクト 小林 昌弘(コバヤシ マサヒロ)
< WINGSプロジェクト について> 有限会社 WINGSプロジェクト が運営する、テクニカル執筆コミュニティ(代表 ...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
