SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

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

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

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


  • X ポスト
  • このエントリーをはてなブックマークに追加

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

自動設定を体験する

 ここでは、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などを参照することでもわかります。

次のページ
自動設定クラスの構造

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
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本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/11897 2020/06/01 19:05

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング