Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

Spring Bootの自動設定の仕組みを理解する

Spring Bootで作るマイクロサービス 第8回

2020/01/22 11:00

 前回までは、Spring Bootの使い方を中心に説明してきましたが、最終回である今回は、Spring Bootの内部の仕組みを紹介します。Spring Bootを使っていると、便利ではあるものの、必要な設定がどこでどのように行われているか疑問に思うことがあります。既存の設定をカスタマイズして変えたい場合には特にそのように思うことでしょう。各種ライブラリの設定を自動で行う設定機能はSpring Bootにとって大きな特徴であり、Spring Boot自体を理解するのに大いに役立つはずです。

目次

自動設定を体験する

 ここでは、Spring Bootの自動設定機能(AutoConfiguration)を体験するために、筆者がよく利用するGsonというライブラリを使います。例えば、リスト1のコードを記述してみます。

[リスト1]Gsonライブラリを利用するサンプルプログラム(src/main/java/com/coltware/springboot/main/config/SampleApplication.javaの抜粋)
@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です。

[リスト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:自動設定(Autoconfigure)の概要
図1:自動設定(Autoconfigure)の概要
  • (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などを参照することでもわかります。


著者プロフィール

  • WINGSプロジェクト 小林 昌弘(コバヤシ マサヒロ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。個人紹介主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしど...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

バックナンバー

連載:Spring Bootで作るマイクロサービス

もっと読む

All contents copyright © 2005-2020 Shoeisha Co., Ltd. All rights reserved. ver.1.5