Spring boot事始め

Spring bootとは?

Spring Frameworkは2002年に登場したフレームワークで、当初はDI(Dipendency Injection:依存性の注入)と呼ばれる機能を実現するための小さなフレームワークでしたが、次第にDIをベースとする様々な機能が実装され、今では「統合フレームワーク」と呼ばれる大規模なものへと成長していきました。そんな、統合フレームワーク「Spring Framewrok」の中でも、「Webアプリケーション開発のためのフレームワーク」として多くのJavaプログラマに支持されているのが「Spring Boot」です。

Spring Frameworkよりも使いやすく、開発者にとって手軽なものとして現在多くの人に利用されています。

なぜ、Spring FrameworkではなくSpring bootを使うのか

上述したように、Spring BootはSpring Frameworkに内包される、コンポーネントの一つに過ぎません。 であれば、Spring Frameworkを使えばいいじゃん!と思うかと思いますが、Spring Frameworkは巨大なフレームワーク群となっているため、アプリケーション開発時に行う設定など、厳密な定義を必要とし、また、その設定も非常に煩雑なものとなってしまい、結果として開発者にとってハードルの高いものへとなってしまいました。

Spring FrameworkではXMLで設定の記述をしていましたが、これがなかなかの記述量で面倒。 しかもちょっとでも記述を誤ると想定した動きにならないという点が開発者にとってハードルの高いものとなり、敬遠されてきました。

この問題をSpring BootはAuto Configurationという機能を作ったことで解消しました。

Spring Initializerを使ったプロジェクトを例に特徴をつかむ。

※java8、IDESTSを使用しております。IDEのInstallなど、事前に必要な手順は既に済ませているものとして進めていきます。

Spring Initializerを使ってプロジェクトを作成すると、下記のようなファイルが作成されているかと思います。

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

@SpringBootApplication

@SpringBootApplicatinには、@Configuration,@EnableAutoConfiguration,@ComponentScanが内包されており、 この@SpringBootApplicationアノテーション一つで、

  • このクラスがコンフィギュレーション(設定)クラスであり(@Configuration)、
  • AutoConfig(自動設定)の有効化を行い(@EnableAutoConfiguration)、
  • AutoConfigの対象として、このクラスのパッケージ配下にあるBeanを指定する(@ComponentScan)、

といったことを行っています。

runメソッドの引数には、@EnableAutoConfigrurationを付与したクラスを指定する、というルールがありますが、 @SpringBootApplicationに内包されているため、問題なく動作します。

ちなみに、@EnableAutoConfigrationの上にカーソルがある状態でジャンプ(「F3」押下)すると EnableAutoConfigrationのクラス宣言の上に下記のような記述があると思います。

@Import(EnableAutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {

@EnableAutoConfigurationには、別のコンフィギュレーションクラスをインポートすることを示すアノテーション(@Import)が指定されており、インポートされるコンフィギュレーションクラスはorg.springframework.boot.autoconfigure.EnableAutoConfigurationImportSelectorクラスの実装によって決まります。 EnableAutoConfigurationImportSelectorの実装では、クラスパス上の/META-INF/spring.factoriesよりインポート対象のコンフィギュレーションクラスを取得するようになっており、以下のコンフィギュレーションクラスがインポート対象になっています。

(こちら)https://qiita.com/kazuki43zoo/items/8645d9765edd11c6f1ddの記事から引用させて頂きました。(非常に詳しく、また、大変分かりやすい説明となっているので一読をオススメします。)

この働きにより、大量のコンフィギュレーションクラスがimportされ、開発者自身での設定に代わって、必要な設定を、Spring Boot側で処理しています。