Springを使ったwebアプリにリファクタリングしよう

土岐 孝平
土岐 孝平Springの研修、開発支援 at 合同会社 現場指向
1
【ハンズオン】
Spring を使った Web アプリに
リファクタリングしよう
2016/11/18
日本 Spring ユーザ会
土岐 孝平
自己紹介
• 土岐 孝平 ( とき こうへい )
• Spring を使用したシステム開発の支援
• Java や Spring の研修の講師
• 資格
– Spring Professional
– Spring Web Application Developer
• 書籍の執筆
2
[ 改訂新版 ]Spring 入門
ハンズオンの概要
• Servlet ・ JDBC を直接使ったアプリを、 Spring
を使ったアプリにリファクタリングする
• プログラムが洗練されて、生産性が上がること
を実感する
• Spring が行ってることを知る
– 洗練された部分≒裏で Spring が働く部分
3
アプリの題材
• 顧客管理アプリ
4
参照系
更新系
アプリの構造 ( 現状 )
5
web.xml
DB
ブラウザ
JSP
ファイル
Customer
XxxServlet
Customer
ServiceImpl
Customer
DaoImpl
Customer
Service
Customer
Dao
Customer
JDBC
JDBC
プレゼンテーション層 サービス層 データアクセス層
問題点
• データアクセス層
– リソースの取得・解放のコードが冗長
• サービス層
– トランザクション制御のコードが冗長
• プレゼンテーション層
– リクエストのマッピングが面倒
– 入力チェックのコードが複雑
• その他
– 下位の層の具象クラスに依存
6
リソースの取得・解放のコードが冗長
• sample.customer.dao. CustomerDaoImpl クラス
7
データアクセス層
トランザクション制御のコードが冗長
• sample.customer.service. CustomerServiceImpl
8
サービス層
リクエストのマッピングが面倒
• WEB-INF/web.xml
9
プレゼンテーション層
入力チェックのコードが複雑
• sample.customer.servlet. CustomerEditServlet
10
プレゼンテーション層
下位の層の具象クラスに依存
• sample.customer.service. CustomerServiceImpl
11
その他
【演習】 Spring を使って解決しましょう
• どのように解決されるか、演習を通して理解しましょう
• 演習手順は github にアップされています
– https://github.com/KouheiToki/jsug-handson-20161118
• 演習時間: 80 分
– 目安
• 躓いたら、講師陣にお気軽にお声掛けください
12
初心者 中級者
参照系の機能 80 分 45 分
更新系の機能 50 分 35 分
改善点
• データアクセス層
– DB 接続・切断のコードなくなった
• サービス層
– トランザクション制御のコードがなくなった
• プレゼンテーション層
– リクエストのマッピングが簡単になった
– 入力チェックが簡単になった
• その他
– 下位の層の具象クラスに依存しなくなった
13
リソースの取得・解放のコードがなくなった
• sample.customer.dao. CustomerDaoImpl クラス
14
データアクセス層
トランザクション制御のコードがなくなった
• sample.customer.service. CustomerServiceImpl
15
サービス層
リクエストのマッピングが簡単になった
• sample.customer.controller.CustomerShowController
16
プレゼンテーション層
入力チェックが簡単になった
• sample.customer.entity.Customer
17
プレゼンテーション層
下位の層の具象クラスに依存しなくなった
• sample.customer.service. CustomerServiceImpl
18
その他
その他ポイント
• Bean のコンフィグレーション
– コンフィグレーション方法の種類と使い分け
• データアクセス
– コネクション・トランザクション周りの仕組み
• Spring MVC
– 画面周りの処理の流れ
• Spring Boot
– Spring Boot が行っていること
19
コンフィグレーションの方法
• コンフィグレーションの方法は3種類から選べ
ます
– XML
– アノテーション
– JavaConfig
20
n のコンフィグレーション
DI コンテナ
: Foo
結果は同じ
※ DI コンテナが
  管理するオブジェクトのことを
   Bean という
一般的と思われる使い分け
• 業務個別の Bean(Controller 、 Service 、 Dao) はアノテーション
– Bean の数が増えてもメンテナンスが楽
• 裏方の Bean は XML もしくは JavaConfig
– 環境ごとに Bean 定義を用意&一元化できて切替が容易
– サードパーティのクラスにアノテーションは付けれない
21
:
Controller
: Service : Dao
: Transaction
Manager
:
DataSource
: View
Resolver
本番用 テスト用
業務個別
裏方
n のコンフィグレーション
: Transaction
Manager
:
DataSource
: View
Resolver
コネクション・
トランザクション周りの仕組み
• コネクションの取得・解放、トランザクションの開始・終了は
Spring が行う
– アプリで上記のコードは出てこない
– コネクションを引数で渡さなくてよい
22
foo
:
Controller
: Proxy
@Transactional
: Service : Dao
:データア
クセス機能
foo
bar
baz
SQL
ThreadLocal
: Connection
connect 、  begin
commit 、  close
データアクセス
• HttpServlet を継承した DispacherServlet が全体
の処理を制御している
画面周りの処理の流れ
23
Controller
Model
Dispatcher
Servlet
Handler
Mapping
Handler
Adapter
View
Resolver
View
ブラウザ
①
②
③ ④
⑤
⑥
⑦
⑧⑨
Controller と
メソッドを
特定
引数の値を
用意
View の形式・
ファイルを特
定
全体の処理
を制御
Spring MVC
Spring Boot が行っていること
• 必要な Jar ファイルのダウンロードや、裏方の Bean のコンフィグレーショ
ン、組込サーバ (Tomcat) の実行を自動で行ってくれる
• 業務個別の Bean のプログラムの作りは、 Boot を使っても使わなくても変
わらない
• 組込じゃない Tomcat にデプロイすることも可能
24
:
Controller
: Service : Dao
裏方の Bean
: Tomcat
組込サーバ
必要な Jar ファイル
Spring
の jar
JPA
の jar
JUnit
の jar ・・・
Boot が用意
業務個別の Bean
・・・
Spring Boot
Tomcat
の jar
: Transaction
Manager
:
DataSource
: View
Resolver
接続先などの
プロパティ
今回
使用した部分
さいごに
• 書籍を購入して、知識を広げましょう
• おすすめの書籍
25
[ 改訂新版 ]Spring 入門 Spring 徹底入門
26
ご清聴ありがとうございました
27
ライセンスについて
• JSUG マスコットアイコン(本スライド左下)が残されている場合に限り、本作品(またそれ
を元にした派生作品)の複製・頒布・表示・上演を認めます。
• 非商用目的に限り、本作品(またそれを元にした派生作品)の複製・頒布・表示・上演を認め
ます。
• 本作品のライセンスを遵守する限り、派生作品を頒布することを許可します。
1 of 27

More Related Content

What's hot(20)

試験にでるSpring試験にでるSpring
試験にでるSpring
土岐 孝平5.1K views
中規模Angularアプリケーションの再設計中規模Angularアプリケーションの再設計
中規模Angularアプリケーションの再設計
bitbank, Inc. Tokyo, Japan6.9K views
Spring bootでweb 基本編Spring bootでweb 基本編
Spring bootでweb 基本編
なべ 8.7K views
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation8.4K views
ドメイン駆動設計入門ドメイン駆動設計入門
ドメイン駆動設計入門
増田 亨28.6K views
実践 NestJS実践 NestJS
実践 NestJS
Ayumi Goto1.2K views

Viewers also liked(20)

Spring Day 2016 springの現在過去未来Spring Day 2016 springの現在過去未来
Spring Day 2016 springの現在過去未来
Yuichi Hasegawa11.8K views
Lineにおけるspring frameworkの活用Lineにおけるspring frameworkの活用
Lineにおけるspring frameworkの活用
Tokuhiro Matsuno33.7K views
Spring Day 2016 - Web API アクセス制御の最適解Spring Day 2016 - Web API アクセス制御の最適解
Spring Day 2016 - Web API アクセス制御の最適解
都元ダイスケ Miyamoto22.6K views
楽天トラベルとSpring(Spring Day 2016)楽天トラベルとSpring(Spring Day 2016)
楽天トラベルとSpring(Spring Day 2016)
Rakuten Group, Inc.14K views
Cloud Foundry x WagbyCloud Foundry x Wagby
Cloud Foundry x Wagby
Yoshinori Nie5K views
Distributed Tracing Velocity2016Distributed Tracing Velocity2016
Distributed Tracing Velocity2016
Reshmi Krishna1.7K views

Similar to Springを使ったwebアプリにリファクタリングしよう

Spring.projectSpring.project
Spring.project広平 田村
1.5K views107 slides
Springの今Springの今
Springの今Kazuyuki Kawamura
2.7K views43 slides

Similar to Springを使ったwebアプリにリファクタリングしよう(20)

SpringBootの研修本で学んだことSpringBootの研修本で学んだこと
SpringBootの研修本で学んだこと
iPride Co., Ltd.46 views
Spring.projectSpring.project
Spring.project
広平 田村1.5K views
Springの今Springの今
Springの今
Kazuyuki Kawamura2.7K views
スキトラ Spring + mybatisスキトラ Spring + mybatis
スキトラ Spring + mybatis
小川 昌吾4.8K views
Springの向かう先Springの向かう先
Springの向かう先
Kazuyuki Kawamura1.1K views
オープニングオープニング
オープニング
konekto354 views
Challenge PWA!! TRY PWA4WP!Challenge PWA!! TRY PWA4WP!
Challenge PWA!! TRY PWA4WP!
Ryu Shindo2.2K views
Spring知っておきたいSpring知っておきたい
Spring知っておきたい
Yuichi Hasegawa4K views
UnicastWS vol.2UnicastWS vol.2
UnicastWS vol.2
Unicast Inc.946 views
Azure Service Fabric 概要Azure Service Fabric 概要
Azure Service Fabric 概要
Daiyu Hatakeyama3.9K views
Force.com開発基礎Force.com開発基礎
Force.com開発基礎
Salesforce Developers Japan4.4K views
Java web application testingJava web application testing
Java web application testing
Tokuhiro Matsuno7.7K views

More from 土岐 孝平(9)

Springを使ったwebアプリにリファクタリングしよう