Spring徹底入門 Spring FrameworkによるJavaアプリケーション開発


Spring徹底入門 Spring FrameworkによるJavaアプリケーション開発


翔泳社


著者:株式会社NTTデータ


はじめに
本書を読む前に

1 Spring Frameworkとは
1.1 Spring Framworkの概要
1.2 Spring Frameworkの歴史
1.3 Springの各種プロジェクトについて
1.3.1 Spring MVC
1.3.2 Spring Security
1.3.3 Spring Data
1.3.4 Spring Batch
1.3.5 Spring Integration
1.3.6 Spring Cloud
1.3.7 Spring Tool Suite
1.3.8 Spring IO Platform
1.3.9 Spring Boot
1.3 Java EEとの関係

2 Spring Core(DI×AOP)
2.1 SpringによるDI(依存性の注入)
2.1.1 DI(依存性の注入)とは
2.1.2 ApplicationContextとBean定義
2.1.3 Configuration方法
2.1.4 インジェクションの種類
2.1.5 オートワイヤリング
2.1.6 コンポーネントスキャン
2.1.7 Beanのスコープ
2.1.8 Beanのライフサイクル
2.1.9 Configurationの分割
2.1.10 Configurationのプロファイル化
2.1.11 JSR 330:Dependency Injection for Java
2.2 AOP
2.2.1 AOPの概要
2.2.2 Spring AOP
2.2.3 Adviceの実装方法
2.2.4 XMLでAdviceを定義
2.2.5 Pointcut式
2.2.6 Springプロジェクトで利用されているAOP
2.3 データバインディングと型変換
2.3.1 Springのデータバインディング
2.3.2 Springの型変換
2.3.3 PropertyEditorの利用
2.3.4 Conversion Serviceの利用
2.3.5 フォーマット指定用のアノテーションの利用
2.3.6 Type Conversionのカスタマイズ
2.3.7 Field Formattingのカスタマイズ
2.4 プロパティ管理
2.4.1 Bean定義内でプロパティの使用
2.4.2 Beanにプロパティをインジェクション
2.5 Spring Expression Language(SpEL)
2.5.1 SpELのセットアップ
2.5.2 SpEL APIの利用
2.5.3 Bean定義でのSpELの利用
2.5.4 SpELで使用可能な式の表現
2.6 リソースの抽象化
2.6.1 Resourceインターフェイスと実装クラス
2.6.2 ResourceLoaderインターフェイス
2.6.3 Resourceインターフェイスを使用したリソースアクセス
2.6.4 XMLファイル上でのリソースの指定
2.7 メッセージ管理
2.7.1 MessageSourceインターフェイスと実装クラス
2.7.2 MessageSourceの利用
2.7.3 ネイティブコードのメッセージ定義
2.7.4 メッセージの多言語サポート

3 データアクセス(Tx、JDBC)
3.1 Springによるデータアクセス
3.1.1 データソースについて
3.1.2 データソースのコンフィギュレーション
3.2 Spring JDBC
3.2.1 Spring JDBCとは
3.2.2 JdbcTemplateクラスを利用したCRUD操作
3.2.3 取得結果の変換処理
3.2.4 応用的なCRUD操作
3.3 トランザクション管理
3.3.1 トランザクションマネージャ
3.3.2 宣言的トランザクション
3.3.3 明示的トランザクション
3.3.4 トランザクションの分離レベルと伝播レベル
3.4 データアクセスエラーのハンドリング
3.4.1 Springが提供するデータアクセス例外
3.4.2 データアクセス例外のハンドリング
3.4.3 データアクセス例外の変換ルールのカスタマイズ

4 Spring MVC
4.1 Spring MVCとは
4.1.1 Webアプリケーション開発における特徴
4.1.2 MVCフレームワークとしての特徴
4.2 はじめてのSpring MVCアプリケーション
4.2.1 開発プロジェクトの作成
4.2.2 Spring MVCの適用
4.2.3 トップ画面表示処理の実装
4.2.4 入力画面表示処理の実装
4.2.5 送信処理の実装
4.2.6 入力チェック処理の実装
4.2.7 XMLファイルを使用したBean定義
4.3 Spring MVCのアーキテクチャ
4.3.1 フレームワークのアーキテクチャ
4.3.2 フロントコントローラのアーキテクチャ
4.3.3 DIコンテナとの連携

5 Webアプリケーションの開発
5.1 Webアプリケーションの種類
5.1.1 画面を応答するWebアプリケーション
5.1.2 データのみを応答するWebアプリケーション
5.2 アプリケーションの設定
5.2.1 サーブレットコンテナの設定
5.2.2 アプリケーションコンテキストの設定
5.2.3 フロントコントローラの設定
5.3 @Controllerの実装
5.3.1 Controllerで実装する処理の全体像
5.3.2 Controllerクラスの作成
5.3.3 Handlerメソッドの作成
5.3.4 Handlerメソッドの引数
5.3.5 Handlerメソッドの戻り値
5.3.6 View Controllerの利用
5.4 リクエストマッピング
5.4.1 リクエストパスの使用
5.4.2 パスパターンの使用
5.4.3 HTTPメソッドの使用
5.4.4 リクエストパラメータの使用
5.4.5 リクエストヘッダーの使用
5.4.6 Content-Typeヘッダーの使用
5.4.7 Acceptヘッダーの使用
5.5 リクエストデータの取得
5.5.1 パス変数値の取得(@PathVariable)
5.5.2 リクエストパラメータ値の取得(@RequestParam)
5.5.3 @RequestParam、@RequestHeader、@CookieValueの属性値
5.5.4 コンパイルオプションの注意点
5.5.5 利用可能な型
5.5.6 バインディング処理のカスタマイズ(WebDataBinder)
5.5.7 アノテーションを使用したフォーマットの指定
5.6 フォームクラスの実装
5.6.1 フォームオブジェクトのスコープ
5.6.2 フォームクラスの作成
5.6.3 HTMLフォームとのバインディング
5.6.4 シンプル型とのバインディング
5.6.5 シンプル型のコレクションとのバインディング
5.6.6 ネストしたJavaBeansとおバインディング
5.6.7 コレクション内のJavaBeansとのバインディング
5.6.8 プロパティ値のリセット
5.7 入力チェック
5.7.1 入力チェックの有効化
5.7.2 入力チェック結果の判定
5.7.3 未入力の扱い
5.7.4 入力チェックツールの指定
5.7.5 ネストしたJavaBeansの入力チェック
5.7.6 入力チェックルールの追加
5.7.7 入力チェックルールの切り替え
5.7.8 エラー情報の表示
5.7.9 エラーメッセージの解決
5.7.10 Bean Validationのカスタマイズ
5.7.11 Spring Validatorの利用
5.8 画面遷移
5.8.1 遷移先の指定方法
5.8.2 リクエストパスへのリダイレクト
5.8.3 リクエストパスへのフォワード
5.8.4 Viewとのデータ連携
5.8.5 リダイレクト先とのデータ連携
5.9 Viewの解決
5.9.1 テンプレートベースのView
5.9.2 InternalResourceViewResolverのBean定義
5.10 JSPの定義
5.10.1 ディレクティブ
5.10.2 スクリプトレット
5.10.3 カスタムタグライブラリ
5.10.4 タグファイル
5.10.5 EL(Expression Language)
5.10.6 EL関数
5.10.7 JSPの共通設定
5.10.8 JSTLの利用
5.11 SpringのHTMLフォーム用タグライブラリの利用
5.11.1 タグライブラリのセットアップ
5.11.2 フォームの出力
5.11.3 フォーム項目の共通的な属性
5.11.4 テキストフィールドの出力
5.11.5 パスワードフィールドの出力
5.11.6 テキストエリアの出力
5.11.7 複数チェックボックスの出力
5.11.8 チェックボックスの出力
5.11.9 複数ラジオボタンの出力
5.11.10 ラジオボタンの出力
5.11.11 セレクトボックスの出力
5.11.12 隠しフィールドの出力
5.11.13 ラベルの出力
5.11.14 ボタンの出力
5.11.15 入力チェックエラーの出力
5.12 Springの汎用タグライブラリの利用
5.12.1 タグライブラリのセットアップ
5.12.2 ロケール別のメッセージの出力
5.12.3 テーマ別のメッセージの出力
5.12.4 入力チェックエラーの判定
5.12.5 バインディング情報(BindStatus)の取得
5.12.6 BindStatusと連携した文字列変換
5.12.7 URLの生成
5.12.8 エスケープ有無のデフォルトの上書き
5.12.9 出力値のエスケープ
5.12.10 SSpELの実行結果の取得
5.12.11 リクエストマッピング情報と連携したURLの生成
5.13 例外ハンドリング
5.13.1 例外の種類
5.13.2 例外の発生個所とハンドリング方法
5.13.3 サーブレットコンテナのエラーページ機能の利用
5.13.4 Spring MVCの例外ハンドラの利用
5.13.5 @ExceptionHandlerメソッドの利用
5.13.6 @ResponseStatusを指定した例外クラスの利用

6 RESTful Webサービスの開発
6.1 REST APIのアーキテクチャ
6.1.1 Resource Oriented Architecture(ROA)
6.1.2 フレームワークのアーキテクチャ
6.2 アプリケーションの設定
6.2.1 ライブラリのセットアップ
6.2.2 サーブレットコンテナの設定
6.2.3 フロントコントローラの設定
6.3 @RestControllerの実装
6.3.1 Controllerで実装する処理の全体像
6.3.2 Controllerクラスの作成
6.3.3 REST API(Handlerメソッドの)の作成
6.3.4 CORSのサポート
6.3.5 URIの組み立て
6.4 リソースクラスの実装
6.4.1 リソースクラスの作成
6.4.2 Jacksonの機能を使用したフォーマットの制御
6.5 例外ハンドリング
6.5.1 REST APIのエラー応答
6.5.2 Spring MVCの例外ハンドラの実装
6.5.3 ハンドリング対象の例外クラスの追加
6.5.4 入力チェック例外のハンドリング
6.5.5 サーブレットコンテナに通知されたエラーの応答
6.6 RESTクライアントの実装
6.6.1 RestTemplateとは
6.6.2 RestTemplateのセットアップ
6.6.3 REST APIの呼び出し
6.6.4 エラー応答のハンドリング
6.6.5 タイムアウトの指定

7 Spring MVCの応用
7.1 HTTPセッションの利用
7.1.1 セッション属性(@SessionAttributes)
7.1.2 セッションスコープBean
7.2 ファイルアップロード
7.2.1 ファイルアップロードの仕組み
7.2.2 ファイルアップロード機能のセットアップ
7.2.3 アップロードデータの取得
7.3 非同期リクエストの実装
7.3.1 非同期リクエストの仕組み
7.3.2 非同期実行を有効にするための設定
7.3.3 非同期処理の実装
7.3.4 非同期実行の例外ハンドリング
7.3.5 非同期実行に対する共通処理の実装
7.4 共通処理の実装
7.4.1 サーブレットフィルタの利用
7.4.2 HandlerInterceptorの利用
7.4.3 @ControllerAdviceの利用
7.4.4 HandlerMethodArgumentResolverの利用
7.5 静的リソース
7.5.1 デフォルトサーブレットとDispatcherServletの共存
7.5.2 Spring MVC独自の静的リソース解決の仕組み
7.6 国際化
7.6.1 ロケールの解決
7.6.2 ロケールの利用
7.6.3 UIを使用したロケールの切り替え

8 Spring Test
8.1 Spring Testとは
8.2 DIコンテナ管理のBeanに対するテスト
8.2.1 Beanの単体テスト
8.2.2 DIコンテナ内のBeanに対する結合テスト
8.2.3 Spring TestContext Framework
8.2.4 DIコンテナのコンフィギュレーション
8.2.5 DIコンテナのライフサイクル制御
8.2.6 プロファイルの指定
8.2.7 テスト用のプロパティ値の指定
8.3 データベースアクセスを伴う処理のテスト
8.3.1 テスト用のデータソースの設定
8.3.2 テストデータのセットアップ
8.3.3 テストケース用のトランザクション制御
8.3.4 テーブルの中身の検証
8.4 Spring MVCのテスト
8.4.1 MockMvcとは
8.4.2 MockMvcのセットアップ
8.4.3 テストの実行
8.4.4 リクエストデータのセットアップ
8.4.5 実行結果の検証
8.4.6 実行結果の出力

9 Spring Security
9.1 Spring Securityとは
9.1.1 Spring Securityの特徴
9.1.2 基本機能
9.1.3 強化機能
9.2 Spring Securityのセットアップ
9.2.1 ライブラリのセットアップ
9.2.2 Spring SecurityのBean定義
9.2.3 サーブレットフィルタの設定
9.3 Spring Securityのアーキテクチャ
9.3.1 Spring Securityのモジュール構成
9.3.2 フレームワークのアーキテクチャ
9.4 認証処理の適用
9.4.1 認証処理の仕組み
9.4.2 フォーム認証
9.4.3 認証成功時のレスポンス
9.4.4 認証失敗時のレスポンス
9.4.5 データベース認証
9.4.6 パスワードのハッシュ化
9.4.7 認証イベントのハンドリング
9.4.8 ログアウト
9.4.9 ログアウト成功時のレスポンス
9.4.10 認証情報へのアクセス
9.4.11 認証処理とSpring MVCの連携
9.4.12 エラーメッセージ
9.5 認可処理の適用
9.5.1 認可処理の仕組み
9.5.2 アクセスポリシーの記述方法
9.5.3 Webリソースへの認可(Java Config編)
9.5.4 Webリソースへの認可(XMLファイル編)
9.5.5 メソッドへの認可
9.5.6 JSPの画面項目への認可
9.5.7 認可エラー時のレスポンス
9.6 CSRF対策
9.6.1 Spring SecurityのCSRF対策
9.6.2 CSRF対策機能の適用
9.6.3 トークンチェックエラー時のレスポンス
9.6.4 CSRF対策機能とSpring MVCとの連携
9.7 セッション管理
9.7.1 セッション管理機能の適用
9.7.2 URL Rewriting抑止機能
9.7.3 セッション固定攻撃対策機能
9.7.4 多重ログインの制御
9.7.5 無効なセッションを使ったリクエストの検知
9.8 ブラウザのセキュリティ対策機能との連携
9.8.1 セキュリティヘッダー出力機能の適用
9.8.2 デフォルトでサポートしているセキュリティヘッダー
9.8.3 セキュリティヘッダーの選択
9.9 Spring Securityのテスト
9.9.1 Spring Security Testのセットアップ
9.9.2 認証処理のテスト
9.9.3 認可処理のテスト
9.9.4 CSRFトークンチェック対象のリクエストに対するテスト

10 Spring Data JPA
10.1 JPA(Java Persistence API)とは
10.1.1 ORMとJPAの概念
10.1.2 Entity
10.1.3 EntityManager
10.1.4 Entityの状態
10.1.5 関連
10.1.6 JPQL(Java Persistence Query Language)
10.2 JPAを用いたデータベースアクセスの基本
10.2.1 JPAによるCRUD操作
10.2.2 JPAによるJPQLを用いたデータアクセス
10.2.3 排他制御
10.3 Spring Data JPA
10.3.1 Spring Dataとは
10.3.2 Spring Data JPAとは
10.4 Spring Data JPAのアーキテクチャ
10.4.1 内部処理の流れ
10.4.2 JpaRepository
10.4.3 例外の変換
10.5 Spring Data JPAのセットアップ
10.5.1 依存ライブラリの定義
10.5.2 DataSourceの定義
10.5.3 EntityManagerFactoryの定義
10.5.4 JpaTransactionManagerの定義
10.5.5 Spring Data JPAの有効化
10.5.6 Open EntityManager in Viewパターンの設定
10.6 Repositoryの作成と利用
10.6.1 Spring Data JPA標準のCRUD操作
10.6.2 JPQLによるデータアクセス
10.6.3 排他制御
10.6.4 ページネーション
10.6.5 Repositoryへのカスタムメソッドの追加
10.6.6 監査情報の付与

11 Spring+MyBatis
11.1 MyBatisとは
11.1.1 MyBatisとSpringの連携
11.1.2 MyBatisとMyBatis-Springの主要コンポーネント
11.1.3 MyBatis-Springの例外ハンドリング
11.2 Spring+MyBatisのセットアップ
11.2.1 ライブラリのセットアップ
11.2.2 SpringとMyBatisを連携するための設定
11.2.3 MyBatisの設定
11.3 基本的なCRUD操作
11.3.1 Mapperインターフェイスの作成
11.3.2 マッピングファイルの作成
11.3.3 SQLへの値の埋め込み方法
11.3.4 埋め込み値の連携方法
11.3.5 SELECT(Read)操作の実装
11.3.6 INSERT(Create)操作の実装
11.3.7 UPDATE操作の実装
11.3.8 DELETE操作の実装
11.3.9 Mapperオブジェクトの利用
11.4 MyBatisでの応用的なCRUD操作
11.4.1 マッピングファイル上での動的SQLの組み立て
11.4.2 SQLビルダークラスによるSQL文の組み立て
11.4.3 1対1と1対多のマッピング
11.4.4 RowBoundsを利用した範囲検索
11.4.5 ResultHandlerによる検索結果の処理

12 Spring+Thymeleaf
12.1 Thymeleafとは
12.1.1 Thymeleafのテンプレート
12.1.2 ThymeleafとSpringの連携
12.2 Spring+Thymeleafのセットアップ
12.2.1 ライブラリのセットアップ
12.2.2 SpringとThymeleafを連携するための設定
12.3 Thymeleafを利用したViewの実装
12.3.1 はじめてのThymeleaf
12.3.2 テキストの出力
12.3.3 式の構文
12.3.4 th属性による属性値の設定
12.3.5 HTML要素の出力制御
12.3.6 インライン記述
12.3.7 コメント
12.3.8 Springとの連携
12.3.9 テンプレートの共通化
12.3.10 Spring Securityとの連携
12.3.11 JSR 310:Date and Time APIの利用

13 Spring Boot
13.1 Spring Bootとは
13.1.1 Spring Bootで作るHello Worldアプリケーション
13.1.2 AutoConfigureによる自動設定
13.1.3 Starterによる依存ライブラリの解決
13.1.4 実行可能jarの作成
13.2 Spring BootでSpring MVC
13.2.1 RESTful Webサービスの作成
13.2.2 画面遷移型アプリケーションの作成
13.3 Spring Bootでデータアクセス
13.3.1 Spring JDBC
13.3.2 Spring Data JPA
13.3.3 MyBatis
13.3.4 コネクションプールライブラリの変更
13.4 Spring BootでSpring Security
13.4.1 Basic認証
13.4.2 認証・認可のカスタマイズ
13.5 Spring Bootで型安全なプロパティ設定
13.5.1 @ConfigurationPropertiesを用いたプロパティの設定
13.5.2 Bean Validationによるプロパティ値のチェック
13.5.3 IDEによるプロパティの補完
13.6 Spring Boot Actuatorで運用機能強化
13.6.1 HTTPエンドポイントの追加
13.6.2 ヘルスチェック
13.6.3 メトリクス
13.6.4 セキュリティの有効化

14 チュートリアル
14.1 アプリケーションの概要
14.1.1 ER図
14.1.2 会議室一覧表示機能の画面仕様
14.1.3 予約機能の画面仕様
14.1.4 ログイン機能の画面仕様
14.2 アプリケーションの開発
14.2.1 プロジェクトのセットアップ
14.2.2 プロジェクトのパッケージ構成
14.2.3 PostgreSQLのセットアップ
14.2.4 プロパティファイルの設定
14.2.5 ライブラリの追加
14.2.6 JPAのエンティティの作成
14.2.7 会議室一覧表示機能の実装
14.2.8 会議室予約機能の実装
14.2.9 ログイン機能の実装
14.2.10 実行可能jarの作成
14.3 おわりに

A 付録
A.1 開発プロジェクトのセットアップ
A.1.1 IDEのセットアップ
A.1.2 プロジェクトの作成
A.1.3 アプリケーションの動作確認

索引

書籍目次

Posted by shi-n