contents memorandum はてな

目次とメモを置いとく場

『[改訂新版]Spring入門――Javaフレームワーク・より良い設計とアーキテクチャ』(長谷川裕一,大野渉,土岐孝平 技術評論社 2016//2004)

著者:長谷川 裕一[はせがわ・ゆういち](1964-) 
著者:大野 渉[おおの・わたる](1976-) 
著者:土岐 孝平[とき・こうへい](1976-) 
装丁:轟木 亜紀子[とどろき・あきこ](トップスタジオデザイン室


[改訂新版]Spring入門 ――Javaフレームワーク・より良い設計とアーキテクチャ:書籍案内|技術評論社



【メモランダム】
・表記について。
 略語の後に正式名称を示すさいに、( )と[ ]の二種類が使用されている。
 丸括弧は著者らによるもの。全括弧は私(id:Mandarine)が付加したもの。



【目次】
免責/商標について [ii]
題辞 [iii]
謝辞/著者のことば [iv]
はじめにのはじめに(3人を代表して 長谷川裕一) [v-vi]
本書の読み方 [vii]
サンプルコードについて [vii]
各章の概略ナビゲーション [viii-ix]
目次 [x-xvi]


第1章 SpringとWebアプリケーションの概要
1.1 Springの最新事情 002
  1.1.1 Springの歴史
  1.1.2 Springのプロジェクト
  1.1.3 Springの国内動向
  1.1.4 日本Springユーザ会
  1.1.5 Springの教育

1.2 Webアプリケーション概論 005
  1.2.1 SpringとWebアプリケーション 005
  1.2.2 Webアプリケーションとは? 006
    1.2.2.1 JSPServletの登場
    1.2.2.2 EJB(Enterprise Java Beans)の登場と衰退
    1.2.2.3 Springの登場
    1.2.2.4 Springの現在
  1.2.3 アプリケーションアーキテクチャ 013
    1.2.3.1 アプリケーションアーキテクチャの必要性
      Webアプリケーション開発のアーキテクチャ目標
      開発効率とアプリケーションアーキテクチャの必要性
      Webアプリケーションのライフサイクルとアプリケーションアーキテクチャの必要性
        ■僕の経験
        ■アプリケーションアーキテクチャは自由な発想で
    1.2.3.2 ティアとレイヤ
    1.2.3.3 凹型レイヤ
    [COLUMN]安定依存原則(Stable Dependencies Principle)と依存関係逆転原則(Dependency Inversion Principle)と凹型レイヤ 020
  1.2.4 プレゼンテーション層の役割 021
    1.2.4.1 MVC2とは何か
    [COLUMN]MVC2JSPモデル 022
    1.2.4.2 多様化するユーザインタフェース
  1.2.5 ビジネスロジック層の役割 023
    1.2.5.1 ビジネスロジック層のパターン
      トランザクションスクリプト
      ドメインモデル
    1.2.5.2 トランザクション管理
      宣言的トランザクション
      明示的トランザクション
  1.2.6 データアクセス層の役割 029
    1.2.6.1 ORマッピング
    1.2.6.2 DBアクセスフレームワークの種類
    1.2.6.3 データアクセス層の設計指針
      ビジネスロジック層とデータアクセス層の分離
    [COLUMN]パーティションもしくはインフラ層 031
    1.2.6.4 部品化
  1.2.7 Webアプリケーションの抱える問題 035
    1.2.7.1 EJB[Enterprise Java Beans]の問題(っていうのはもうない)
    1.2.7.2 オブジェクトのライフサイクルの問題
    1.2.7.3 部品化の問題
    1.2.7.4 技術隠蔽や不適切な技術隠蔽の問題
    1.2.7.5 問題解決はSpringにおまかせ
    1.2.7.6 部品化の未来

1.3 Spring概要 040
  1.3.1 Springとは?
  1.3.2 プレゼンテーション層
    1.3.2.1 Spring MVC
    1.3.2.2 Spring Security
  1.3.3 ビジネスロジック
    1.3.3.1 SpringのDIxAOPコンテナ
    1.3.3.2 Spring cache
  1.3.4 データアクセス層
    1.3.4.1 Spring JDBC
    1.3.4.2 Spring Data
    1.3.4.3 Spring ORMインテグレーション機能
  1.3.5 バッチ
  1.3.6 Spring Boot
  1.3.7 Springを使う理由


第2章 SpringのCore
2.1 Spring のDI(Dependency Injection) 046
  2.1.1 DIとは?
  2.1.2 DIの使いどころ
  2.1.3 アノテーションを使ったDI
    2.1.3.1 基本――@Autowiredと@Component
    2.1.3.2 とりあえず@Autowiredと@Componentを動かしてみる
    2.1.3.3 @Autowired
    2.1.3.4 @Component
    2.1.3.5 ライフサイクル管理
    2.1.3.6 リフレクションの問題
  2.1.4 Bean定義ファイルでDependency Injection
    2.1.4.1 BeanFactory
    2.1.4.2 Bean定義ファイル
    2.1.4.3 beanタグ
    2.1.4.4 Bean定義ファイルの分割
    2.1.4.5 プロパティファイルの利用
  2.1.5 JavaConfigでDependency Injection
    2.1.5.1 サンプルコードを使ったJavaConfig
      @Beanメソッドの引数からの取得
      @Beanメソッドを呼び出して取得
      @Autowiredプロパティから取得
    2.1.5.2 サンプルコードの実行
    2.1.5.3 再度,JavaConfigの使いどころ
  2.1.6 ApplicationContext
    2.1.6.1 WebアプリケーションでBean定義ファイルの読み込み
    2.1.6.2 WebアプリケーションでJavaConfigの読み込み
    2.1.6.3 メッセージソース
    2.1.6.4 イベント処理
  2.1.7 Springのロギング
  2.1.8 SpringのUnitテスト
  2.1.9 Bean 定義ファイルのプロファイル機能
    2.1.9.1 DIコンテナに直接指定する方法
    2.1.9.2 SpringJUnit4ClassRunnerテストクラスに指定する方法
    2.1.9.3 Webアプリケーションで指定する方法
  2.1.10 おまけ的なライフサイクルのハナシ
      Initialization(初期化)
      Use(利用)
      Destruction(終了)
    [COLUMN]学習の拡張 086

2.2 SpringのAOPAspect Oriented Programming) 087
  2.2.1 AOPとは?
    2.2.1.1 AOPの用語
    2.2.1.2 Adviceの一覧
    2.2.1.3 Proxyを利用したAOP
    2.2.1.4 AOPの使いどころ
  2.2.2 アノテーションを使ったAOP
    2.2.2.1 Pointcutの記述方法
    2.2.2.2 アノテーションによるAdviceの作り方
      Before Advice,After Advice
      AfterReturning Advice
      Around Advice
      AfterThrowing Advice
  2.2.3 JavaConfig を利用したAOP
  2.2.4 Bean定義ファイルを利用したAOP


第3章 データアクセス層の設計と実装
3.1 データアクセス層とSpring 108
  3.1.1 DAOパターンとは?
  3.1.2 Javaのデータアクセス技術とSpring
  3.1.3 汎用データアクセス例外
  3.1.4 データソース
    3.1.4.1 サードパーティが提供するデータソース
    3.1.4.2 アプリケーションサーバが提供するデータソース
    3.1.4.3 組み込みデータベースのデータソース

3.2 Spring JDBC 122
  3.2.1 JDBCを直接使用した場合の問題
  3.2.2 Spring JDBCの利用
  3.2.3 Templateクラス
    3.2.3.1 Templateクラスのオブジェクト生成とインジェクション
  3.2.4 SELECT文(ドメインへ変換しない場合)
    3.2.4.1 queryForObjectメソッド
    3.2.4.2 queryForMapメソッド
    3.2.4.3 queryForListメソッド
  3.2.5 SELECT文(ドメインへ変換する場合)
    3.2.5.1 queryForObjectメソッド
    3.2.5.2 queryメソッド
  3.2.6 INSERT/UPDATE/DELETE文
  3.2.7 NamedParameterJdbcTemplate
  3.2.8 バッチアップデート,プロシージャコール
    3.2.8.1 batchUpdateメソッド
    3.2.8.2 プロシージャコール

3.3 Spring Data JPA 140
  3.3.1 Spring Data JPAとは?
  3.3.2 JPAの基礎
    3.3.2.1 Entityクラスを作成する
    3.3.2.2 EntityManagerのメソッドを呼び出す
  3.3.3 Spring Data JPAの利用
  3.3.4 EntityManagerの設定
  3.3.5 DAOのインタフェースの作成
  3.3.6 命名規則に沿ったメソッドの定義
  3.3.7 JPQLの指定
    3.3.7.1 検索系のJPQLの指定
    3.3.7.2 更新系のJPQLの指定
  3.3.8 実装を自分で行いたい場合
3.4 まとめ 150


第4章 ビジネスロジック層の設計と実装
4.1 トランザクションとは 152
  4.1.1 トランザクションの境界
  4.1.2 トランザクション処理を実装する場所の問題
  4.1.3 AOPを利用したトランザクション処理

4.2 トランザクションマネージャ 157
  4.2.1 トランザクション定義情報
    4.2.1.1 伝搬属性
    4.2.1.2 独立性レベル
    4.2.1.3 その他のトランザクション定義情報
  4.2.2 トランザクションマネージャの実装クラス

4.3 トランザクション機能の使い方 162
  4.3.1 宣言的トランザクションの設定
    4.3.1.1 Bean定義ファイルによる宣言的トランザクション
    4.3.1.2 アノテーションによる宣言的トランザクション
  4.3.2 明示的トランザクションの使い方
    4.3.2.1 明示的トランザクションの使いどころについて
4.4 まとめ 169


第5章 プレゼンテーション層の設計と実装
5.1 Spring MVCの概要 172
  5.1.1 Spring MVCMVC2パターン
  5.1.2 Spring MVCアノテーション
  5.1.3 Spring MVCとREST[Representational State Transfer]
  5.1.4 Spring MVCの登場人物と動作概要
    5.1.4.1 Controllerの概要とModelオブジェクト
    5.1.4.2 ViewとViewResolver
    5.1.4.3 UrlBasedViewResolverとビューのパス
  5.1.5 Spring MVCと関連する「Springの機能」
    5.1.5.1 Springのメッセージ管理
    5.1.5.2 データバインディング
    5.1.5.3 バリデーション

5.2 環境作成と動作確認 187
  5.2.1 動作環境の構築
  5.2.2 ビジネスロジックのBean定義(メッセージ管理設定とBean Validation設定)
  5.2.3 Spring MVCの設定
    5.2.3.1 Controllerの登録とアノテーション設定
    5.2.3.2 静的リソースファイルの設定
    5.2.3.3 ViewResolverの設定
    5.2.3.4 Spring MVCのJavaConfig
  5.2.4 DispatcherServletとCharacterEncodingFilterの設定
    5.2.4.1 Web.xmlの設定
    5.2.4.2 WebApplicationInitializerの設定

5.3 サンプルアプリケーションの概要 199
  5.3.1 レイヤとパッケージ構造
  5.3.2 ビジネスロジック層のクラス

5.4 画面を表示するController 202
  5.4.1 @RequestMappingアノテーション
    5.4.1.1 URL指定とURIテンプレート,そしてマトリクスURI
      URIテンプレート
      マトリクスURI
    5.4.1.2 @RequestMappingアノテーションの属性
      HTTPメソッド
      リクエストパラメータ
    5.4.1.3 クラスレベルの@RequestMappingアノテーション
  5.4.2 Controllerのメソッドの引数
  5.4.3 Controllerのメソッドの戻り値
  5.4.4 サンプルアプリケーションの作成①
    5.4.4.1 Controllerクラスの作成
    5.4.4.2 顧客一覧画面表示処理の実装
    5.4.4.3 顧客詳細画面表示処理の実装

5.5 入力値を受け取るController 218
  5.5.1 入力値の受け取りと @ModelAttributeアノテーション
  5.5.2 データバインディング/バリデーションと入力エラー処理
    5.5.2.1 データバインディング
    5.5.2.2 データバインディングとBean Validation
    5.5.2.3 Controllerでのエラー処理とErrorsオブジェクト
    5.5.2.4 エラーメッセージの定義
  5.5.3 Model オブジェクトと sessionスコープ
  5.5.4 JSPとSpringタグライブラリの利用
    5.5.4.1 Spring:bindタグとBindStatusオブジェクト
    5.5.4.2 formタグライブラリの使用
    5.5.4.3 エラーメッセージの表示
    5.5.4.4 メッセージの表示
  5.5.5 サンプルアプリケーションの作成②
    5.5.5.1 Controllerクラスの作成
    5.5.5.2 入力画面表示の実装
    5.5.5.3 データバインディング/バリデーションイベントの実装
    5.5.5.4 確認画面表示の実装
    5.5.5.5 更新処理の実装
    5.5.5.6 顧客情報更新機能の実装

5.6 Spring MVCのその他の機能 250
  5.6.1 flashスコープ
  5.6.2 Spring MVCの例外処理
    5.6.2.1 Controllerごとに例外処理を定義
    5.6.2.2 1つのWebアプリケーション内で共通の例外処理を定義
  5.6.3 ControllerAdvice
  5.6.4 ファイルアップロード
  5.6.5 REST APIの実装―― XMLJSONの送受信
    5.6.5.1 HttpMessageConverter
    5.6.5.2 XMLクラスのマッピング定義
    5.6.5.3 HTTPメッセージ受信の実装
    5.6.5.4 HTTPメッセージ送信の実装と例外処理
    5.6.5.5 ResponseEntityオブジェクト

5.7 最後に 267


第6章 認証・認可
6.1 認証・認可とフレームワーク 270
6.2 認証・認可の基本 270
  6.2.1 認証機能とは何か?
  6.2.2 認可機能とは何か?

6.3 Spring Securityの概要と導入 273
  6.3.1 Spring Securityの概要
  6.3.2 Spring Securityの導入
    6.3.2.1 Spring Securityの設定ファイル
    6.3.2.2 Webアプリケーションへの適用
      web.xmlで設定する方法
      SecurityWebApplicationInitializerで設定する方法
    6.3.2.3 動作確認

6.4 Spring Securityの基本構造 282
  6.4.1 SecurityContext,Authentication,GrantedAuthority
  6.4.2 AuthenticationManager と AccessDecision Manager

6.5 Webアプリケーションと認証 284
  6.5.1 AuthenticationManagerの基本構造
  6.5.2 メモリ上で認証情報を管理
  6.5.3 データベースで認証情報を管理
    6.5.3.1 サンプル認証・認可テーブル
    6.5.3.2 Spring設定ファイルの定義
    6.5.3.3 (応用編)独自UserDetailsオブジェクトの定義とJdbcDaoImplの拡張
  6.5.4 (応用編)独自認証方式の適用
  6.5.5 パスワードの暗号化
  6.5.6 ログイン/ログアウト機能の適用
    6.5.6.1 フォームログイン機能の設定
    6.5.6.2 ログイン処理と認証オブジェクトの取得
    6.5.6.3 ログアウト機能の設定

6.6 Web アプリケーションと認可(アクセス制御) 305
  6.6.1 SpEL[Spring Expression Language]を使ったアクセス制御定義
  6.6.2 URL単位のアクセス制御
  6.6.3 メソッド単位のアクセス制御
  6.6.4 AccessDeniedException発生時のフローとエラーハンドリング

6.7 Spring Securityの連携機能 315
  6.7.1 JSPとの連携―― Spring Securityタグライブラリ
    6.7.1.1 authorizeタグ
    6.7.1.2 authenticationタグ
  6.7.2 Servlet APIとの連携
  6.7.3 Spring MVCとの連携

6.8 セキュリティ攻撃対策 320
  6.8.1 Cross Site Request Forgery (CSRF) 対策機能
      Session Fixation対策機能

6.9 まとめ 324


第7章 ORM連携―― HibernateJPA,MyBatis
7.1 Hibernateとの連携 326
  7.1.1 Hibernateとは?
  7.1.2 Hibernateの利用イメージ
  7.1.3 解説で使用するサンプル
  7.1.4 SessionFactoryのBean定義
  7.1.5 DAOの実装
  7.1.6 汎用データアクセス例外の利用

7.2 JPA との連携 332
  7.2.1 JPAの利用イメージ
  7.2.2 解説で使用するサンプル
  7.2.3 EntityManagerFactoryのBean定義
  7.2.4 DAOの実装
  7.2.5 汎用データアクセス例外の利用

7.3 MyBatis との連携 336
  7.3.1 MyBatisとは?
  7.3.2 連携機能の提供元
  7.3.3 MyBatisの利用イメージ
  7.3.4 解説で使用するサンプル
  7.3.5 SqlSessionFactoryのBean 定義
  7.3.6 DAOの実装
    7.3.6.1 Mapperを使わない場合
    7.3.6.2 Mapperを使う場合
  7.3.7 汎用データアクセス例外の利用

7.4 まとめ 344


第8章 キャッシュ抽象機能(Cache Abstraction)―― Spring Cache
8.1 ProductDaoImplとProductServiceImpl,ProductSampleRunの改造と動作確認 347
  8.1.1 キャッシュの適用と実行
    8.1.1.1 application-context.xml
    8.1.1.2 キャッシュアノテーションの設定
    8.1.1.3 実行と不具合
    8.1.1.4 修正と実行
8.2 応用編 352


第9章 バッチの設計と実装
9.1 バッチ 356
  9.1.1 バッチの基本
  9.1.2 ジョブの基本
  9.1.3 ジョブネットの基本

9.2 Spring Batch 358
  9.2.1 全体像
  9.2.2 JobLauncher
    9.2.2.1 JobRunner
  9.2.3 Step,Job,ItemReader,ItemProcessor,ItemWriter
    9.2.3.1 ItemReader,ItemProcessor,ItemWriterの簡単な解説
  9.2.4 JobInstance
  9.2.5 Execution
    9.2.5.1 JobExecutionとStepExecution
  9.2.6 ExecutionContext
  9.2.7 JobRepository

9.3 サンプルを使った解説 367
  9.3.1 サンプルを見る前に
    9.3.1.1 RDBの設定
    9.3.1.2 Bean定義ファイル(batch-context.xml
  9.3.2 batch-entry(バッチの入門)
  9.3.3 batch-basic(バッチの基本)
    9.3.3.1 基本の基本
      item-context.xml
        ■Aブロック―― ItemReader
        ■Bブロック―― ItemProcessor
        ■Cブロック―― ItemWriter
      job-context.xml
    9.3.3.2 リスナー(Listener)を追加する
  9.3.4 batch-advanced(バッチの応用)
    9.3.4.1 item-context.xml
    9.3.4.2 job-context.xml ――順次・分岐・平行
      順次
      分岐
      平行
        ■Split
        ■Partition
  9.3.5 Spring BatchのUnitテスト


第10章 Cloud Nativeの入り口
10.1 Spring Boot 390
  10.1.1 Spring Bootで作って動かす
  10.1.2 pom.xmlと依存関係
  10.1.3 ソースコードの解析
  10.1.4 Spring BootでWebアプリケーションを実行

10.2 Pivotal Web Servicesを利用して"Hello World!" 395
  [COLUMN]Cloud FoundryとPivotal Cloud Foundry

10.3 PWSにログインする 397

10.4 PWSにデプロイして実行する 398

10.5 おわりに 401
  [COLUMN]Cloud Nativeは業務システムでも有効か?


おわりに [403-404]
索引 [405-414]
著者索引 [415]






【誤植】
・サポートページの誤植訂正から漏れているものだけをメモしておく。

 [p.290]
誤「6.4.1項「Authentication,GrantedAuthority,SecurityContext」で述べたように」
 →
正「6.4.1項「SecurityContext,Authentication,GrantedAuthority」で述べたように」