Springフレームワーク5の習得、パート1:Spring MVC

Spring MVCは、JavaWebアプリケーションを構築するためのSpringフレームワークの従来のライブラリです。これは、完全に機能するJavaWebアプリケーションとRESTfulWebサービスを構築するための最も人気のあるWebフレームワークの1つです。このチュートリアルでは、Spring MVCの概要を理解し、Spring Boot、Spring Initializr、およびThymeleafを使用してJavaWebアプリケーションを構築する方法を学習します。

ダウンロードコードをダウンロードするこのチュートリアルのサンプルアプリケーションのソースコードを入手してください。スティーブンヘインズによってJavaWorldのために作成されました

SpringInitializrを使用したSpringBoot

SpringBootとSpringInitializrを使用して、Spring MVCWebアプリケーションを追跡します。構築するアプリケーションの種類に関する入力が与えられると、Spring Initializrは最も一般的な依存関係とデフォルトを使用して、基本的なSpringBootアプリケーションをセットアップおよび構成します。カスタム依存関係を追加することもできます。SpringInitializrはそれらを含めて管理し、サードパーティソフトウェアとSpringの両方とのバージョン互換性を確保します。 Spring Bootアプリケーションは、ランタイム環境を提供しなくてもスタンドアロンで実行されます。

この場合、Webアプリケーションを構築しているため、Spring Bootはアプリのランタイムの一部としてTomcatを自動的に組み込み、構成します。MavenPOMファイルにH2データベースドライバーを追加してアプリをカスタマイズすることもできます。その後、Spring BootはDataSource、アプリケーションコンテキストに埋め込みデータベースとインスタンスを自動的に作成します。依存関係が設定されると、SpringBootはアプリケーションのデフォルト構成を提供します。もちろん、必要に応じて構成を変更することもできますが、Spring Bootのおかげで、すぐに使用できる完全に構成された、動作するアプリケーションという有利なスタートを切ることができます。

依存関係を選択して構成したら、それらの選択をSpring Initializrに渡します。これにより、ベースのSpringBootプロジェクトを含むダウンロード可能なZIPファイルが提供されます。

H2データベースエンジンを搭載したSpringMVC

まず、データをH2組み込みデータベースに永続化する基本的なSpring MVCWebアプリケーションを作成します。

手順1.アプリをセットアップして構成する

start.spring.ioSpringInitializrに移動し、[ JavaとSpring Boot2.0.Xを使用してMavenプロジェクトを生成する]を選択します。Xは最新のSpringBootバージョン(この記事の執筆時点では2.0.3)です。Spring Web MVC 5を実装できるように、必ずSpring Boot2.xを選択してください。SpringBoot1.4およびSpringBoot1.5はSpring4を実装します。

など、Webアドレスに一致する形式でグループ名を入力し、などcom.geekcap.javaworldのアーティファクト名を入力しますspring5mvc-example。図1に私の構成を示します。

スティーブンヘインズ

Webアプリに依存関係を追加するには、依存関係のコンマ区切りリストを[依存関係の検索]テキストフィールドに入力するか、[フルバージョン切り替える]をクリックします。[フルバージョン切り替える]をクリックすると、より簡単なルートをたどります。依存関係は、コア、Web、テンプレートエンジンなどのグループに分けられます。この例では、Web-> Web、テンプレートエンジン-> Thymeleaf、SQL-> JPA、およびSQL-> H2のチェックボックスを選択します。これらの選択のそれぞれがアプリケーションに追加するものは次のとおりです。

  • Web:SpringMVCとTomcat
  • Thymeleaf:ThymeleafWebテンプレートエンジン
  • JPA:Spring JPA、Hibernate、およびSpring Data
  • H2:H2組み込みデータベース

終了したら、ページの下部にある[プロジェクト生成]ボタンをクリックします。Spring Initializrは、ダウンロード可能なすべての必要なプロジェクトソースを含む既製のZIPファイルを作成します。

ステップ2.SpringInitializrプロジェクトをIDEにインポートします

Spring InitializrからZIPファイルを抽出し、プロジェクトをお気に入りのIDEにインポートします。たとえば、プロジェクトをIntelliJにインポートするには、図2に示すように、[ファイル]-> [新しいプロジェクト]を選択します。

スティーブンヘインズ

ステップ3.MavenPOMをセットアップします

次に、[外部モジュールからプロジェクトインポート]に移動し、[ Maven]を選択して、[次へ]を押します。必ずJava1.8プロジェクトSDKを選択してから、[完了]をクリックしてください

SpringBootスターターアプリ

それでは、これまでの(最小限の)取り組みによって生成されたSpringBootスターターアプリケーションを見てみましょう。

まず、リスト1にMavenPOMファイルを示します。

リスト1.Maven pom.xml

   4.0.0 com.geekcap.javaworld spring5mvc-example 0.0.1-SNAPSHOT jar spring5mvc-example Demo project for Spring Boot  org.springframework.boot spring-boot-starter-parent 2.0.3.RELEASE     UTF-8 UTF-8 1.8    org.springframework.boot spring-boot-starter-data-jpa   org.springframework.boot spring-boot-starter-thymeleaf   org.springframework.boot spring-boot-starter-web   com.h2database h2 runtime   org.springframework.boot spring-boot-starter-test test      org.springframework.boot spring-boot-maven-plugin     

POMファイルが特別な親POMを使用していることに注意してくださいspring-boot-starter-parent。親POMを使用して、すべての依存関係のバージョンを管理し、バージョンに互換性があることを確認します。POMファイルの最後にあるリポジトリは、Springスナップショットおよびマイルストーンリポジトリを参照します。Spring Boot 2.xはこの記事の執筆時点ではまだマイルストーンリリースであるため、これらが必要です。

依存関係はごくわずかであり、ほとんどの前にspring-boot-starter

  • spring-boot-starter-data-jpa
  • spring-boot-starter-thymeleaf
  • spring-boot-starter-web
  • spring-boot-starter-test

これらのスターター依存関係はそれぞれ、必要なすべてのサブ依存関係をもたらします。図3は、IntelliJで部分的に拡張された依存関係ビューを示しています。

スティーブンヘインズ

POMファイルには、次の依存関係が含まれています。

  • spring-boot-starter-data-jpa HibernateおよびSpringデータが含まれます。
  • spring-boot-starter-thymeleaf Thymeleafテンプレートエンジンが含まれています。
  • spring-boot-starter-webspring-boot-starter-tomcat、ApacheTomcatの組み込みバージョンが含まれています。
  • spring-boot-starter-json JacksonJSONライブラリが含まれています。
  • spring-web and spring-webmvc SpringMVCが含まれます。
  • spring-boot-starter-test JUnitやMockitoなどのテストライブラリが含まれています。

Spring Bootは、CLASSPATHでこれらの依存関係を確認すると、自動構成を開始します。たとえば、が見つかった場合はspring-boot-starter-web、Tomcatの埋め込みバージョンがspring-boot-starter-jpa作成され、H2が見つかった場合は、H2埋め込みデータベースとHibernateが作成されますEntityManager。次に、EntityManagerをSpringDataにワイヤリングします。

Spring Bootは、アプリケーションの実行に使用できる単一のクラスも作成します。サンプルアプリケーションのクラスをリスト2に示します。

リスト2.Spring5mvcExampleApplication.java

 package com.geekcap.javaworld.spring5mvcexample; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Spring5mvcExampleApplication { public static void main(String[] args) { SpringApplication.run(Spring5mvcExampleApplication.class, args); } } 

This class leverages the SpringApplication.run() method, passing in the class to run (Spring5mvcExampleApplication in this example). The @SpringBootApplication annotation includes the following annotations:

  • @Configuration informs Spring that the Spring5mvcExampleApplication class contains configuration information. (This annotation can be used to create beans that will get registered with the Spring context.)
  • @EnableAutoConfiguration tells Spring to automatically configure resources from dependencies found in the CLASSPATH, such as H2 and Tomcat.
  • @ComponentScan tells Spring to scan packages in the CLASSPATH under the current package (com.geekcap.javaworld.spring5mvcexample) for Spring-annotated components such as @Service and @Controller.

Spring scans the CLASSPATH and automatically creates components such as the embedded Tomcat server and H2 database. It then populates the Spring context with the application components found in the package scan. In essence, Spring Boot makes it very easy to select and configure the services, components, controllers, entities, and so forth that you need for your application. Once you've done that, Spring will automatically find them, make them available in the Spring context, and autowire everything together.

We've got our Spring Boot starter project setup and ready to go. In the next section we'll create the Spring MVC components for our Java web application.

What is the Spring context?

The Spring context is a registry of all available Spring beans. Classes are identified as Spring beans by annotating them with specific Spring annotations. Examples include @Service, which identifies a business service, @Controller, which identifies a Spring MVC controller (i.e., handles web requests), and @Entity, which is a JPA annotation used to identify classes that are mapped to database tables.

Once these beans are annotated they need to be registered with the Spring context, which Spring Boot does by performing a package scan of all classes in packages in your project. As the Spring context is being built, it implements the inversion-of-control (IoC) design pattern through dependency injection: when a Spring bean needs a dependency, such as a service or repository, the bean can either define a constructor that accepts the dependent bean or it can leverage the @Autowired annotation to tell Spring that it needs that dependency. Spring resolves all dependencies and "autowires" the application together.

Dependency Injection is a powerful design pattern because, rather than creating and managing dependencies inside your code--which can be messy and leads to tightly coupled classes--you can instead delegate control to the Spring container. Your class simply tells the container what dependencies it needs to run and the container provides the appropriate dependencies to your class at runtime.

About Spring MVC 5

Spring MVC implements the popular Model-View-Controller pattern, which you've probably seen in other web frameworks. The Model-View-Controller pattern separates concerns into three categories:

  • Model represents your domain objects.
  • View renders your model to a view, such as to an HTML page.
  • Controller sits between your view and model and translates change requests in the view into changes in the model, and vice versa. In practical terms, the controller accepts incoming requests, potentially updates the model, and sends your model objects to a "view" to render back to the client.

In Spring MVC, controllers are identified by the @Controller annotation and accompanied by a @RequestMapping annotation. The annotation defines the HTTP verb (standard HTTP commands like GET, POST, PUT, and DELETE) and URI for which the request-mapping method will be applied. Spring 4 introduced shortcut request mappings, which make things even easier. We'll use these mappings--@GetMapping, @PostMapping, @PutMapping, @PatchMapping, and @DeleteMapping--for our example application.

The model in Spring MVC

このアプリケーションでは、単純なモデルオブジェクトを定義し、Widgetそれを埋め込みH2データベースに格納し、ウィジェットを管理するためのコントローラーを構築します。Widgetリスト3に示されているクラスから始めましょう。