magazine.gif Spring入門

謝辞
はじめに
本書の読み方
各章の概略ナビゲーション

第1章 Webアプリケーション概論

  • 1.1 SpringとWebアプリケーション
  • 1.2 Webアプリケーションとは何か?
    • 1.2.1 JSP,Servletの登場
    • 1.2.2 EJBの登場と衰退
    • 1.2.3 軽量コンテナの登場
      • 1.2.3.1 DIコンテナ
      • 1.2.3.2 Aspect Injection(アスペクトの注入)
      • 1.2.3.3 EJBの後継として
  • 1.3 アプリケーションアーキテクチャ
    • 1.3.1 アプリケーションアーキテクチャの必要性
      • 1.3.1.2 システム開発の目標
      • 1.3.1.3 開発効率とアプリケーションアーキテクチャの必要性
      • 1.3.1.4 システムのライフサイクルとアプリケーションアーキテクチャの必要性
    • 1.3.2 レイヤ
    • 1.3.3 凹型レイヤ
  • 1.4 プレゼンテーション層の役割
    • 1.4.1 MVC2とは何か?
    • 1.4.2 MVCフレームワークの種類
    • 1.4.3 画面の設計指針
    • 1.4.4 JSPの配置
    • 1.4.5 アプリケーションコントローラの設計指針
      • 1.4.5.1 入力データの変換
      • 1.4.5.2 入力データの検証
      • 1.4.5.3 サービスロジックの分離
  • 1.5 ビジネス層の役割
    • 1.5.1 ドメイン,エンティティ,ValueObject
    • 1.5.2 ビジネス層のパターン
      • 1.5.2.1 サービス優先
      • 1.5.2.2 ドメイン優先
    • 1.5.3 トランザクション管理(ACID属性はご存じですか)
      • 1.5.3.1 宣言的なトランザクション
      • 1.5.3.2 明示的なトランザクション
  • 1.6 データアクセス層の役割
    • 1.6.1 O/Rマッピング
    • 1.6.2 DBアクセスフレームワークの種類
    • 1.6.3 データアクセス層の設計指針
      • 1.6.3.1 ビジネス層とデータアクセス層の分離
  • 1.7 Spring概要
    • 1.7.1 Spring Frameworkとは何か?
    • 1.7.2 Springと凹型レイヤ
    • 1.7.3 すべての層で利用可能なDIコンテナとAOP
      • 1.7.3.1 SpringのDIコンテナ
      • 1.7.3.2 SpringのAOP(アスペクト指向プログラミング)
    • 1.7.4 プレゼンテーション層
      • 1.7.4.1 SpringMVCフレームワーク
      • 1.7.4.2 SpringWebインテグレーション機能
    • 1.7.5 ビジネス層
      • 1.7.5.1 DIコンテナとサービス,ドメイン
      • 1.7.5.2 AOPとトランザクション管理
    • 1.7.6 データアクセス層
      • 1.7.6.1 SpringのJDBC抽象化フレームワーク
      • 1.7.6.2 Spring ORMインテグレーション機能
    • 1.7.7 Springとユニットテスト
  • Column1 J2EE(Java 2 Platform,Enterprise Edition)
  • Column2 DIとType
  • Column3 アーキテクチャとは何か?正しく説明できますか?
  • Column4 安定依存原則(Stable Dependencies Principle)と依存関係逆転原則(Dependency Inversion Principle)と凹型レイヤ
  • Coffee Break 僕と若手プログラマの会話

第2章 Springの導入

  • 2.1 開発環境
  • 2.2 Tomcat Plugin
    • 2.2.1 インストール
    • 2.2.2 初期設定
    • 2.2.3 使用方法
  • 2.3 Spring IDE
    • 2.3.1 インストール
    • 2.3.2 使用方法
  • 2.4 Springの導入
  • Column1 あなたは、自分の道具にこだわっていますか?
  • Coffee Break 僕と若手プログラマの会話

第3章 DIコンテナ

  • 3.1 Beanファクトリ
    • 3.1.1 ライフサイクル管理
    • 3.1.2 Bean定義ファイル
      • 3.1.2.1 beanタグ
      • 3.1.2.2 依存関係の設定例
      • 3.1.2.3 Bean定義ファイルの分割
      • 3.1.2.4 プロパティファイルの利用
    • 3.1.3 リフレクションの問題
    • 3.1.4 シングルトン(Singleton)
  • 3.2 Applicationコンテキスト
    • 3.2.1 Bean定義ファイルの読込み
    • 3.2.2 メッセージソース
    • 3.2.3 イベント処理
  • 3.3 Springのロギング
  • 3.4 Beanファクトリを使ってみよう
    • 3.4.1 オブジェクトの生成
  • 3.5 Beanファクトリオブジェクトの関連の設定
  • 3.6 Beanファクトリインタフェースベースの設計をしよう
  • Column1 学習の拡張

第4章 アスペクト指向プログラミング――AOP(Aspect Oriented Programming)

  • 4.1 Spring AOPフレームワーク
    • 4.1.1 DIコンテナが解決するものは何か?
    • 4.1.2 アスペクト指向プログラミングの位置付け
    • 4.1.3 アスペクト指向プログラミングとは何か?
    • 4.1.4 AOPの用語
  • 4.2 AOPフレームワークの今
    • 4.2.1 AspectJとは何か?
    • 4.2.2 バイトコードレベルでアスペクトを織り込むタイプ
      • 4.2.2.1 AspectWerkz
      • 4.2.2.2 JAC(Java Aspect Components)
      • 4.2.2.3 JBossAOP
    • 4.2.3 Proxyを利用してアスペクトを織り込むタイプ
  • 4.3 SpringAOP
    • 4.3.1 4つのAdvice
      • 4.3.1.1 Around Advice
      • 4.3.1.2 Before Advice
      • 4.3.1.3 Throw Advice
      • 4.3.1.4 After Returning Advice
    • 4.3.2 Introduction
      • 4.3.2.1 Adviceの一覧
    • 4.3.3 AOPを適用する範囲を指定する Pointcut
    • 4.3.4 Advisor
    • 4.3.5 AOP Proxy
    • 4.3.6 DIコンテナを利用したSpringAOP
    • 4.3.7 Auto Proxy
    • 4.3.8 カッコウの卵
  • Column1 SpringAOPとAspectJの関係
  • Coffee Break 僕と若手プログラマの会話

第5章 DBアクセスとトランザクション

  • 5.1 JDBCを使用したデータベースアクセスの問題点とJDBC抽象フレームワーク
  • 5.2 コールバックパターン
  • 5.3 JDBC抽象フレームワークにおけるコールバック実装
    • 5.3.1 JdbcTemplate
    • 5.3.2 JDBC抽象フレームワークのCallbackインタフェース
      • 5.3.2.1 Statementに対して処理を行うもの
      • 5.3.2.2 ResultSetに対して処理を行うもの
    • 5.3.3 JdbcTemplateの使用方法
  • 5.4 JDBC抽象フレームワークを使用したDAO設計
    • 5.4.1 検索処理RDBMSオペレーションクラス
      • 5.4.1.1 RDBMSオペレーションクラス 一覧結果を返す検索処理
      • 5.4.1.2 1つの検索結果を返すRDBMSオペレーションクラス
    • 5.4.2 更新処理RDBMSオペレーションクラス
    • 5.4.3 DAOの作成
    • 5.4.4 DIコンテナへの登録(DataSourceの設定)
  • 5.5 汎用データベースアクセス例外
  • 5.6 トランザクション制御
    • 5.6.1 従来のトランザクション実装方式
    • 5.6.2 Springで提供されるトランザクション制御の仕組み
    • 5.6.3 PlatformTransactionManagerを使用したトランザクション管理
      • 5.6.3.1 DataSourceTransactionManager
      • 5.6.3.2 ThreadLocalとDataSourceUtils
      • 5.6.3.3 JDBC抽象フレームワークとDataSourceUtils
    • 5.6.4 AOPフレームワークを利用した宣言的トランザクション
      • 5.6.4.1 TransactionProxyFactoryBean
      • 5.6.4.2 トランザクション定義情報の設定
      • 5.6.4.3 DIコンテナとTransactionProxyFactoryBean
      • 5.6.4.4 AutoProxyの利用
    • 5.6.5 JTAの利用
    • 5.6.6 JOTMの導入
  • 5.7 DAOのテスト
    • 5.7.1 DbUnitとは
    • 5.7.2 テストデータを用意する
    • 5.7.3 テストクラスを用意する
  • 5.8 DBアクセスとトランザクションのまとめ
  • Column1 JTA
  • Column2 SpringのJtaTransactionManagerは、イケてない?
  • Coffee Break 僕と若手プログラマの会話

第6章 MVCフレームワーク

  • 6.1 SpringMVCのアーキテクチャ
    • 6.1.1 SpringMVCのDIコンテナ
    • 6.1.2 SpringMVCのコントローラの仕組み
  • 6.2 SpringMVCの基本的な制御フロー
  • 6.3 サンプルアプリケーション−参加受付サイト
  • 6.4 コントローラサーブレット
    • 6.4.1 DispatcherServlet
    • 6.4.2 Bean定義ファイル
  • 6.5 Mapping Definitions
    • 6.5.1 HandlerMapping
      • 6.5.1.1 BeanNameUrlHandlerMapping
      • 6.5.1.2 SimpleUrlHandlerMapping
    • 6.5.2 ViewResolver
      • 6.5.2.1 InternalResourceViewResolver
      • 6.5.2.2 ResourceBundleViewResolver
    • 6.5.3 View
    • 6.5.4 HandlerExceptionResolver
      • 6.5.4.1 SimpleMappingExceptionResolver
  • 6.6 Controller Definitions
    • 6.6.1 Controller
    • 6.6.2 AbstractController
    • 6.6.3 MultiActionController
      • 6.6.3.1 MethodNameResolver
    • 6.6.4 SimpleFormController
      • 6.6.4.1 メソッドprocessFormSubmission
      • 6.6.4.2 メソッドformBackingObject
      • 6.6.4.3 メソッドinitBinder
      • 6.6.4.4 メソッドonSubmit
      • 6.6.4.5 メソッドreferenceData
    • 6.6.5 Validator
    • 6.6.6 JSTLとSpring Tag Library
    • 6.6.7 HandlerInterceptor
  • 6.7 General Definitions
    • 6.7.1 MessageSource
    • 6.7.2 Filter
  • 6.8 リクエストコントローラの単体テスト
  • 6.9 SpringMVCのまとめ
  • Coffee Break 僕と若手プログラマの会話

第7章 Strutsとの連携

  • 7.1 Strutsの概要
  • 7.2 Strutsの課題
  • 7.3 Struts+Spring連携の目的
  • 7.4 Struts+Spring連携
    • 7.4.1 サンプルアプリケーションの説明
    • 7.4.2 DelegatingActionProxyの使用
    • 7.4.3 ActionSupportの利用
    • 7.4.4 DelegatingActionProxyとActionSupport
  • 7.5 Struts+Spring連携のまとめ
  • Column1 組み合せ

第8章 Hibernateとの連携

  • 8.1 Hibernateとは何か?
    • 8.1.1 Hibernateの機能
      • 8.1.1.1 HQL(Hibernate Query Language)
      • 8.1.1.2 プライマリキーの生成
      • 8.1.1.3 エンティティの関連
      • 8.1.1.4 遅延ロード
      • 8.1.1.5 キャッシュ
    • 8.1.2 Hibernateの課題
    • 8.1.3 Spring+Hibernate連携の目的
  • 8.2 Spring+Hibernateの連携
    • 8.2.1 連携前のコード
    • 8.2.2 インテグレーション機能によるHibernate連携
      • 8.2.2.1 定義ファイルの設定
    • 8.2.3 ソースコードの修正
  • 8.3 Spring+Hibernateのトランザクションに関わる落とし穴
    • 8.3.1 重複したPKをどう扱うか
    • 8.3.2 例外をキャッチする
  • Column1 SQLを使う日々
  • Column2 XDocletは本当に使えるツールか?
  • Coffee Break 僕と若手プログラマの会話

第9章 iBATISとの連携

  • 9.1 SpringとiBATISとのインテグレーションの必要性
  • 9.2 iBATISとは何か?
  • 9.3 iBATISの機能
    • 9.3.1 名前付きバインド変数
    • 9.3.2 SQLを動的に組み立てる
    • 9.3.3 プライマリキーの生成
    • 9.3.4 遅延ロード・キャッシュ
  • 9.4 Spring+iBATISの連携
    • 9.4.1 連携前のSpringJDBC抽象フレームワークでのコード
  • 9.5 インテグレーション機能によるiBATIS連携
    • 9.5.1 定義ファイルの設定
    • 9.5.2 ソースコードの修正
  • Column1 思い込み,思い間違い技術

おわりに
索引
著者プロフィール