Spring3入門
Javaフレームワーク・より良い設計とアーキテクチャ

[表紙]Spring3入門―Javaフレームワーク・より良い設計とアーキテクチャ

B5変形判/512ページ

定価(本体3,900円+税)

ISBN 978-4-7741-5380-3

→学校・法人一括購入ご検討の皆様へ

書籍の概要

この本の概要

もはや定番となったJava・オープンソースフレームワークのSpring Frameworkの実践的な入門書。これまでに,Spring入門,Spring2.0入門と発行してきたが,本書は機能の洗練と成熟がされた唯一無二のSpring3.1の解説書籍である。これまでの2冊の集大成ともいえる内容となり,DIコンテナといった概念もより精査されてソフトウェアアーキテクチャへの言及と実践ががより深いものになっている。Javaによるアプリケーション開発を極めよ!

こんな方におすすめ

  • Javaのエンジニア
  • Web開発者,アプリケーションエンジニアなど
  • Javaを愛し,その力をあますことなく活用したいエンジニアの皆さんに

著者の一言

僕が初めてJava/Webアプリケーションと関わりをもったのは1997年頃のことだ。
その頃,僕はC++を使用した開発に従事していたのだけれど,ポインタとかメモリリークとかの不具合で色々と悩まされていたので,そういった問題を解消するJavaの仕様に感動して早速余暇を利用してJavaのプログラムを書き始めた。
その頃,僕はJavaイコールApplet だと思っていたので(世間的にもそういう認識が強かったと思う),僕は初めてのJavaアプリケーション,つまりAppletをふんだんに盛り込んだ自社(当時)のホームページを作った。結局,僕の最初のJavaアプリケーションは,当時の上司に提出したのだが,まったく顧みられることなく捨てられてしまった。ホームページは商品を売らない一般企業には不要と思われていた時代だったのだ。
しかし,それにもめげずにJavaの勉強を続けていたら,いつの間にかJavaの仕事を任される様になり,XML(eXtensible Markup Language) やCORBA(Common Object Request Broker Architecture) を使った分散ミドルウエアや,JSP(Java Server Pages),Servlet, EJB(Enterprise JavaBeans)を使ったWebアプリケーションの仕事を主として担当するようになっていた。
それから暫く経った頃,Webアプリケーションの開発に携わるエンジニアの間では,JSPやServlet,EJBを含むJ2EE(Java2 EE。現在はJava EE)の仕様が複雑で肥大化し過ぎて,理解・利用し辛いことが問題として取り上げられることが多くなっていた。
僕も「うん。確かにその通り,特にEJBは使い辛いなぁ」なんて思いながらWebアプリケーションの仕事に携わってきた中で,J2EEの複雑化や肥大化に対応できるWebアプリケーション開発の「切り札」となるSpring(Spring Framework)というJava/Webアプリケーション用のフレームワークに出会い,そのフレームワークの将来性や優れた設計思想,利用方法を多くのエンジニアに伝えることができればと,JSUG(日本Springユーザ会)を立ち上げ,書籍「Spring入門」を2004年に上梓した。
それから,7年を経てSpringはJavaのフレームワークとしては当たり前に使われるようになってきて,それこそ新入社員が初めて触るフレームワーク,メインフレーマーからの転換者が初めて使うフレームワーク,それがSpringというのも珍しくなくなってきた。そして,7年の間にSpringのバージョンも上がり,2004年に書いた「Spring入門」の技術的な内容は少々古くなってしまった(Spring入門を読み返してみると,AI(Aspect Injection)や軽量コンテナなど,既に死語になっているものも多い)。それに今,世の中的には,携帯端末やクラウドなど,色々なバズワードが飛び交い,Springもその流れの中にいる。単にSpringと言った場合でも,それがSpring Frameworkだけでなく周辺プロダクトを含む意味で利用される機会も多くなっている(本書では,なるべくSpringはSpring Frameworkの意味で使うが,時として広義のSpringを意味することもあるので注意して欲しい)。そうしたバズワードに関連したSpringの新しいプロダクトの位置づけや概要もほんの少しだけではあるが説明しないといけないのではないかと思うようになってきた。
そこで今回,内容的に少々古くなってしまったSpring入門を,現在(2012年3月)の時代に沿うようにちょっとばかり修正を加えて新しい本にしようと考えた(ところが,出版してから8年も経過してしまったSpring入門にちょっとだけ手を加えて新しい本を作るなんて軽々しく考えたのが大間違いだったということは,後に気がつく。これは作り直しだ…)。
でも一応,本書は2004年の「Spring入門」の目的をそのまま踏襲している。つまり「Javaを憶えた。JSP, Servlet, JDBCでWebアプリケーションを作った」「次はSpringだ」というエンジニアの方に向けて,Webアプリケーションの正しい設計とは何か,DIやAOPとは何であって設計をどう助けるのか,そしてSpring MVCやSpring Web Flowの使い方や,Spring以外のHibernate, MyBatisといったWebアプリケーションの代表的なフレームワークとの連携などはどうすべきかを中心に伝えることだ。
残念だけど,Springを既にバリバリ使っている人や,SpringSourceの新しいプロダクトの話などを読みたい方には,本書は向いていない。そういう方は,本書のあとに出版されるかもしれないSpring応用編を読んでもらうか(そもそも,出版社が認めて,なおかつ,筆者達に執筆するだけの余裕があればの話だが),筆者達がおこなうSpringセミナーに参加して頂くか(これはもちろん有料です),3ヶ月に1回程度,その時の気分で企画され実施されるJSUG(日本Springユーザ会)の勉強会に参加して欲しい(東京が中心なので,東京以外に居住されている方には申し訳ないのだが…)。

本書は,システム開発の現場で,コンサルタントやアーキテクトとして切磋琢磨する3人の仲間達で書かせて貰った(Spring入門が最初に出たときと比べると,著者が変わってるが,皆それぞれ新しい場所へと旅立ち大活躍をしています)。3人の仲間達は今も現場で,壁にぶつかり,悩み,解決策を模索している。こんな僕達の書く技術書なので,その中には,偏見や独断に満ちたものもあるかも知れない。僕達にはベストプラクティスだと思えるものが,もしかしたら,皆さんのベストプラクティスでないかもしれない。もし,皆さんの方がそう判断した場合は,その部分は切り捨てて読んで欲しいと思う。世の中には全てのプロジェクトに適合するベストプラクティスなどないのだから。
また本書では,僕達がいつも新入社員に教えるような「仕事に向かう姿勢」も書いてゆきたいと思っている。常に楽しんで前向きに仕事をしている僕達の,仕事に対する取り組み方や考え方を本書に取り込んでいければその目的も達成できると思う。

本書が,皆さんのお力になれれば幸いです。できれば,いつの日か皆さんとご一緒に仕事ができますように。

ナビゲーション

【第1章 Spring とWeb アプリケーションの概要】

Springの歴史や現在のプロダクトに触れた後,Webアプリケーションについての基礎知識を確認してDIやAOPを用いたアプリケーションアーキテクチャはどのようなものかを解説しよう。Springの詳しい説明はないが,Springを適切に使うための重要な情報が詰まっているので,初級者の人は読み飛ばさないでほしい。

【第2章 Spring のDI】

Springを使いこなすには,Springの核であるDIを理解することが必須である。この章では,DIとは何か?から始まり,SpringのDIの使い方や,SpringのDIコンテナが持つ機能について解説する。Bean定義ファイルやアノテーションを使ったDIの方法は後述の章で頻繁に出てくるのでしっかりと抑えよう。

【第3章 Spring のAOP】

AOP(アスペクト指向プログラミング)は,DIと同じようにSpringの基盤となっている技術である。この章では,AOPの概念を解説した後,SpringのAOPの使い方を解説しよう。DIとAOPを組み合わせることで,DI単体の場合と比べて,より優れた関心事の分離を行え,オブジェクト指向とアスペクト指向が相補的な関係にあることが明らかになるはずだ。

【第4章 データアクセス層の設計と実装】

データアクセスの処理では,リソースの取得・破棄や例外のハンドリングといった冗長な処理が発生しやすい。この章では,データアクセス層の役割を確認した後,従来のJDBCを使用したデータアクセスの問題点と,Springが備えるSpring JDBCの利点,および使用法について解説しよう。冗長な処理を排除できることが分かるはずだ。

【第5章 ビジネスロジック層の設計と実装】

ビジネスロジック層をシンプルにするには,ビジネスロジックとトランザクション処理を分離することが重要だ。この章では,Springが提供するトランザクション機能を解説しながら,ビジネスロジック層の適切な作りを一緒に考えていこう。

【第6章 プレゼンテーション層の設計と実装 - Spring Web MVC 編】

Springバージョン2.5からアノテーションを導入し飛躍的に使い易くなったSpring Web MVC。この章では,Spring Web MVCの機能をサンプルアプリケーションを使いながら解説しよう。プレゼンテーション層のさまざまな課題がスマートに解決できることを実感できるはずだ。

【第7章 プレゼンテーション層の設計と実装 - Spring Web Flow 編】

Spring Web Flowは,Springのサブプロジェクトとして開発されているWeb MVCフレームワークだ。Spring Web MVCとはまた異なる特徴を持ったフレームワークであり,特にWebアプリケーションのフローを効率よく実装できるのが特徴だ。ぜひSpring Web MVCと比較しながら,Spring Web Flowを導入するメリットを感じてほしい。

【第8章 Struts1とSpring の連携】

8章から13章までは,Springと他のフレームワークとの連携について解説しよう。この章では,MVCフレームワークとしてもっとも普及が進んでいるStruts1とSpringの連携について解説する。Struts1を単体で利用するよりも,Springと連携させることで,よりすり優れたアプリケーションアーキテクチャを実現できることが明らかになるはずだ。

【第9章 Struts2 とSpring の連携】

Struts1をそろそろ卒業したいと思ってる読者は,Struts1の後継であるStruts2に期待を寄せていることだろう。この章では,Struts2の使い方を解説した後,Springとの連携方法について解説する。Struts1から生まれ変わったStruts2の変貌ぶりに驚く読者は多いはずだ。

【第10章 Hibernate とSpring の連携】

SQLを使わないO/Rマッピングフレームワークとして有名なHibernate。そのHibernateとSpringを連携させてデータアクセスを行う方法について説明しよう。何かと良い面ばかりを取り上げられるSpring + Hibernateだが,落とし穴だってあることに気がついてほしい。

【第11章 JPA とSpring の連携】

Java EEの一部であるJPAは,O/Rマッピングフレームワークの標準APIとして今後も普及していくことが予想される。この章では,JPAの概要とSpringとの連携方法について解説しよう。遅延ロード問題の解決方法についても触れているので,JPAの導入を検討している読者はぜひ参考にしてほしい。

【第12章 MyBatis2.x とSpring の連携】

iBATISの名でも知られるMyBatis2.xは,SQLが書けるO/Rマッピングフレームワークとして人気のフレームワークだ。この章では,MyBatis2.xの基本的な解説をした後,Springとの連携方法と,連携のメリットについて解説しよう。

【第13章 MyBatis3.x とSpring の連携】

MyBatis2.xを使ったことがある読書は多いと思うが,最新バージョンのMyBatis3.xを使ってみたいという読書も多いはずだ。この章では,MyBatis3.xの使い方と,Springとの連携方法について解説する。この章を読めば,MyBatis2.xからパワーアップしたMyBatis3.xを知って,MyBatis3.xを導入したい意欲が湧くだろう。

【付録A Spring Tool Suite のインストール】

機能の説明がいくらよくても,実際に試してみないことには実感することができない。この付録では,Springベースの開発に有効なIDEであるSpring Tool Suite(SpringSourceが開発したEclipseベースのIDE)のインストール手順や,Mavenを使ったプロジェクトの作成について解説する。また,本書のサンプルソースコードをプロジェクトとしてインポートする方法も解説するので,本書を読むだけではなく手も動かしてSpringの良さを感じてほしい。

【付録B Spring3.0 以降の新機能】

Springのメジャーバージョンが3.0になって以降,さまざまな機能が追加されたのだが,本書で紹介できなかった新機能も多い。この付録では,プロファイル機能やキャッシュ抽象機能など,注目すべき新機能をいくつかピックアップして解説しよう。

【付録C 動作確認に使用したライブラリについて】

本書に掲載しているサンプルソースコードを実際に動かしたい読書は,この付録を参照して必要なライブラリを入手してほしい。ライブラリは,付録の情報に従ってMavenの依存ライブラリを設定すれば簡単に入手できる。依存ライブラリの設定方法は付録Aで解説しているので参考にしよう。

では,早速,本文に入っていこう。できればいつでも手を動かして内容を確かめられるように,マシンを立ち上げてIDEを起動しておこう!

この書籍に関連する記事があります!

JavaのSpring Frameworkを勧める理由
Javaの勉強ってどうやったらいいですか?

目次

第1章 SpringとWebアプリケーションの概要

  • 1.1 最新のSpring事情
  • 1.2 Springのプロダクト
  • 1.3 SpringとWebアプリケーション
  • 1.4 Webアプリケーションとは?
  • 1.5 アプリケーションアーキテクチャ
  • 1.6 プレゼンテーション層の役割
  • 1.7 ビジネスロジック層の役割
  • 1.8 データアクセス層の役割
  • 1.9 Webアプリケーションの抱える問題
  • 1.10 Springの概要

第2章 SpringのDI

  • 2.1 DIとは何か
  • 2.2 DIの使いどころ
  • 2.3 アノテーションを使ったDI
  • 2.4 Bean定義ファイルでDI

第3章 SpringのAOP

  • 3.1 DIxAOPコンテナ
  • 3.2 AOPとは何か
  • 3.3 Springが提供するAdvice
  • 3.4 Proxyを利用したAOP
  • 3.5 AOPの使いどころ
  • 3.6 SpringAOP

第4章 データアクセス層の設計と実装

  • 4.1 データアクセス層の役割
  • 4.2 SpringJDBC
  • 4.3 汎用データアクセス例外
  • 4.4 データソース
  • 4.5 まとめ

第5章 ビジネスロジック層の設計と実装

  • 5.1 Webアプリケーションのトランザクション
  • 5.2 トランザクションマネージャ
  • 5.3 トランザクション機能の使い方
  • 5.4 まとめ

第6章 プレゼンテーション層の設計と実装――Spring Web MVC編

  • 6.1 Spring MVCの概要
  • 6.2 環境作成
  • 6.3 サンプルアプリケーションの概要
  • 6.4 画面を表示するController
  • 6.5 入力値を受け取るController
  • 6.6 Spring MVCのその他の機能
  • 6.7 まとめ

第7章 プレゼンテーション層の設計と実装――Spring Web Flow編

  • 7.1 Spring Web Flowの概要
  • 7.2 Spring Web FlowのState
  • 7.3 Spring Web FlowとEL
  • 7.4 Spring Web Flowの初期設定
  • 7.5 簡単なフローを導入してみる
  • 7.6 応用編
  • 7.7 まとめ

第8章 Struts1とSpring の連携

  • 8.1 本書が対象とするフレームワーク
  • 8.2 Struts1の概要
  • 8.3 サンプルアプリケーションの概要
  • 8.4 どの方法がよいのか?
  • 8.5 まとめ

第9章 Struts2とSpringの連携

  • 9.1 Struts2とは?
  • 9.2 Struts2を使用した簡単なサンプル
  • 9.3 Action
  • 9.4 Result(resultタグを使った遷移先のビューの設定)
  • 9.5 ContextMap/OGNL/Struts-Tags
  • 9.6 Interceptors
  • 9.7 Validation
  • 9.8 ExceptionMapping
  • 9.9 ゼロコンフィグレーション
  • 9.10 Struts2とSpringの連携

第10章 HibernateとSpringの連携

  • 10.1 永続化に何を使えばいいのか?
  • 10.2 Hibernateとは?
  • 10.3 Hibernateの使い方
  • 10.4 Hibernateの機能
  • 10.5 Hibernateの課題とHibernateとの連携の目的
  • 10.6 連携前のソースコード
  • 10.7 インテグレーション機能によるHibernate連携
  • 10.8 HibernateとSpringとの連携で起こるトランザクションに関わる落とし穴

第11章 JPAとSpringの連携

  • 11.1 JPAとは何か?
  • 11.2 POJOベースのドメインクラス
  • 11.3 persistence.xmlファイルの編集
  • 11.4 JPAの実行..EJBコンテナなしの場合
  • 11.5 SpringのJPAインテグレーション機能
  • 11.6 DAOクラスの実装
  • 11.7 Bean定義ファイルの設定
  • 11.8 遅延ロードの問題
  • 11.9 遅延ロードを切る?
  • 11.10 TransactionViewパターン
  • 11.11 SpringのOpen EntityManagerInViewFilter
  • 11.12 Triggering Lazy Loading
  • 11.13 Transfar Objectを使う
  • 11.14 選択
  • 11.15 まとめ

第12章 MyBatis2.xとSpringの連携

  • 12.1 SpringとMyBatis2.xとのインテグレーションの必要性
  • 12.2 MyBatis2.xとは何か?
  • 12.3 簡単なサンプル
  • 12.4 MyBatis2.xの機能
  • 12.5 MyBatis2.xとSpringの連携
  • 12.6 まとめ

第13章 MyBatis3.xとSpringの連携

  • 13.1 MyBatis3.xとは何か?
  • 13.2 MyBatis3.xの主な構成物
  • 13.3 MyBatis設定ファイル
  • 13.4 マッピングファイル
  • 13.5 Mapperインタフェース
  • 13.6 Statement Builder
  • 13.7 トランザクション処理
  • 13.8 MyBatis3.xとSpringの連携
  • 13.9 まとめ

付録A SpringSuiteのインストール

  • A.1 STSのインストール
  • A.2 プロジェクトの新規作成と設定
  • A.3 プロジェクトのインポート

付録B Spring3.0以降の新機能

  • B.1 Bean定義のプロファイル機能
  • B.2 Object/XMLマッピング連携
  • B.3 RESTクライアント
  • B.4 Cache Abstraction(キャッシュ抽象)機能
  • B.5 アノテーションによる非同期実行/スケジューリング実行
  • B.6 組み込みデータベースサポート

付録C 動作確認に使用したライブラリについて

著者プロフィール

長谷川裕一(はせがわゆういち)

1964年東京生まれ。自分達らしい仕事を目指して2007年10月に独立しStarlight&Storm LLCを興しました。世の中,理不尽なことも多いですが,僕達はエンジニアの信念に従って理不尽なことははねのけて,これからも仕事を続けてゆく所存です。さて,もちろん仕事は大事ですが,今後の夢は前作と変わらず,子供達と一緒に格闘技ジムを開くこと。資金を貯めるためにも頑張ってます(^^)


合同会社Starlight&Storm

近年のシステム開発は,登山にたとえるなら,新しい技術(オープン)で,巨大(大規模・分散)で困難(ミッションクリティカル)な山(システム)を短期間(短納期)で登ろう(開発)とするものです。しかし,多くの登山隊(開発プロジェクト)は,ハイキングしかやったことのない人間を集め,登山計画をたて,その山に挑みます。それが,どんなに無謀で危険なものかは,登山をしたことのない人にも分かっていただけるでしょう。
山岳ガイドは,自らの優れた技術や知識と豊富な経験をもとに,お客様の訓練をし,お客様のスキルを補いながら,お客様を巨大で困難な山の頂へと安全に導き,お客様の喜びを自らの喜びとする登山のエキスパートです。
Starlight&Stormは,山岳ガイドと同様の技量と志をもった,オブジェクト指向によるシステム開発を成功へと導く,優秀なITのガイド達が集う,2009年に設立された会社です。

ホームページ:Starlight&Storm LLC


大野渉(おおのわたる)

1976年富山県高岡市生まれ。2008年に結婚し,東京の板橋から横浜の綱島へ移り住む。現在はStarlight & Stormのメンバーとして,主に研修講師や技術支援を担当する。最近はさらにSpringに携わる仕事が多くなってきたが,前著Spring2.0入門以降のSpringの進化,特にプレゼンテーション層周りの充実度には目を見張るばかりである。ふとしたきっかけで購入したiPhoneの影響でAppleに魅せられ,現在の仕事環境は完全にMacへ移行。不自由なWin○○○s環境から脱却し,Macの快適な仕事環境にとても満足している。


土岐孝平(ときこうへい)

1976年宮崎生まれ。大学で情報工学を専攻したにも関わらず,卒業後某カジュアルショップの販売員になる。次の年に上京しIT業界へ。非効率な開発現場に多々遭遇する中,教育やコンサルティングの重要性を痛感し,現在はJava関連の教育やコンサルティングに従事する。家で作業することが多く,テレビなどのさまざまな誘惑と日々奮闘している。