2018.08.10この記事は約10分で読めます。Bootを使ったWebアプリケーション開発について学んでいます。Bootであればサクッと作れそうと思ったからです。BootどころかSpringの知識さえも余りないので、「Spring徹底入門」や公式ドキュメント及びソースリーディングしながら、写経とデバッグで動きを追いながら、少しずつ動きや仕組みについて理解を進めているところです。BootでWebMvcベースのアプリケーション開発を行なう時、Javaベースのコンフィグレーションってどうするんだっけ?と、そもそも仕組み周りから理解できていなかったので整理してみました。Bootには、Auto-configurationという、最小限の設定でSpringアプリケーションを容易に構築できる仕組みがあります。必要な条件が満たされる場合(例えば特定のクラスがクラスパス上に存在しているまたは存在していない、など)にBean定義が有効になるといった具合です。以下は、CassandraAutoConfigurationクラスの一例で、アノテーション@ConditionalOnClassで、クラスパスにorg.apache.catalina.Clusterクラスが存在する場合に自動設定定義が有効化されるようになっています。Bootでは、著名な様々なソフトウェアの自動設定を行なうAutoConfigureクラスが提供されています。以下は、spring-bootのautoconfigureプロジェクトのリポジトリですが、cassandraやmongo、solrなどのAutoConfigurationクラスが用意されているのが分かります。GitHub.github.comAutoConfigure機能は、spring-boot-autoconfigureというプロジェクトで定義されており、spring-boot-starterプロジェクトをライブラリとして追加すると、依存ライブラリとして追加されます。BootでWebアプリケーション開発を行なうためのstarterライブラリとして、spring-boot-starter-webがあります。MVCを使ったWebアプリケーション開発のベースが整います。Bootのバージョン2.0.4.RELEASEで、spring-boot-starter-webを依存関係のcompileに指定した場合の依存関係グラフです。(*)spring-web、spring-webmvc、そしてspring-boot-autoconfigureも依存ライブラリとしてクラスパスに追加されます。MVCでWebアプリケーション開発が行えるようになっているようです。Project」作成をすると、すぐに構築できます。組み込みたい依存ライブラリを選択します。同様な事は、以下のウェブページからも可能です。MVCが提供してくれているコンフィグレーションクラスがインポートされ、必要となるコンポーネントのBean定義が自動で行われるようになっています。{}EnableWebMvcの定義を見ると、アノテーション@Importで、org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfigurationクラスがインポートされるようになっています。このクラスは、基本的なコンフィグレーションを担うWebMvcConfigurationSupportクラスを継承しています。WebMvcConfigurerCompositeクラスをメンバ変数に持ち、WebMvcConfigurerオブジェクトらにコンフィグレーションを委譲するようになっています。WebMvcConfigurerオブジェクトは、@Autowiredでインジェクトされるようになっています。以下、各クラスの実装の抜粋です。https://github.com/spring-projects/spring-framework/blob/5.0.x/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurerComposite.java従って、アノテーション@EnableWebMvcが@Configurationクラスのいずれか1つ(@Configurationが付与されるクラスは複数存在し得るため)に付与されており、クラスパス上に@Configurationを付与したWebMvcConfigurerインターフェース実装のクラスを設置する事で、コンフィグレーションのカスタマイズができるようになっているようです。somethingSystem.out.println(configurer);}...}最新のSpring(5.0)より前のバージョンでは、WebMvcConfigurerAdapterクラスを継承していたようですが、5.0以降ではInterfaceのdefault実装を使用しているため、直接WebMvcConfigurerインターフェースを実装したクラスを定義できるようになっています。Bootのautoconfigureライブラリでは、org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfigurationが、@EnableWebMvc相当の処理を担当しているようです。{...}...}WebMvcAutoConfigurationAdapterクラスで、EnableWebMvcConfigurationクラスがインポートされ、EnableWebMvcConfigurationクラスは内部クラスとして定義されています。EnableWebMvcConfigurationクラスはDelegatingWebMvcConfigurationクラスを継承しているため、DelegatingWebMvcConfigurationクラスのように振る舞います。Bootでは@EnableWebMvcを明示的に指定しなくとも、@Configurationを付与したWebMvcConfigurerインターフェースを実装したクラスをコンフィグレーションクラスとしてクラスパス上に配置していれば良いようです。WebMvcConfigurationSupportクラスを継承したクラスでコンフィグレーションを記述した場合は、EnableWebMvcConfigurationクラスはインポートされません。SpringのDocsにもあるように、WebMvcConfigurerインターフェースによるカスタマイズを使用しない場合は、WebMvcConfigurationSupportクラスかDelegatingWebMvcConfigurationクラスを直接継承し、コンフィグレーションを記述することになるようです。https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/config/annotation/EnableWebMvc.htmlコンフィグレーションをカスタマイズしたい場合、通常はWebMvcConfigurerインターフェースを実装したコンフィグレーションクラスを定義すればよいと思います。デフォルトで、すぐにアプリケーション開発ができるような設定がなされた状態となっているからです。7,987Amazon.co.jpで詳細を見る本書籍で一通り学習しましたが、ページ数が豊富で幅広くトピックが取り上げられているのでお勧めです。Java言語そのものの知識は必要なので、『パーフェクトJava』などで基礎は学習しておくと良いです。Bootに関する投稿です。Security)を使用する方法についてのメモです。Bootに関する投稿です。Bootでサーブレットフィルタを設定するにはどうするか?、です。Security機能を有効化する方法について見てきました。Securityの認証機能の1つであるデータベースを使った認証の仕組みについて見ていきます。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。名前:moritetuITエンジニア地方でITエンジニアをしています。Webやスマフォアプリ、Hadoopなどのビッグデータに関するシステムに関わり、現在は企画開発の業務をしています。(必須)サイトタイトルとURLをコピーしました。