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 マスコットアイコン(本スライド左下)が残されている場合に限り、本作品(またそれ
を元にした派生作品)の複製・頒布・表示・上演を認めます。
• 非商用目的に限り、本作品(またそれを元にした派生作品)の複製・頒布・表示・上演を認め
ます。
• 本作品のライセンスを遵守する限り、派生作品を頒布することを許可します。

More Related Content

PDF
これから始めるSpringのwebアプリケーション
PDF
入社1年目のプログラミング初心者がSpringを学ぶための手引き
PDF
Spring Fest 2018 Spring Bootで作るRESTful Web Service
PDF
Springを何となく使ってる人が抑えるべきポイント
PDF
今さら聞けないDiとspring
PDF
これからSpringを使う開発者が知っておくべきこと
PDF
Spring Bootをはじめる時にやるべき10のこと
PPT
Spring3.1概要 データアクセスとトランザクション処理
これから始めるSpringのwebアプリケーション
入社1年目のプログラミング初心者がSpringを学ぶための手引き
Spring Fest 2018 Spring Bootで作るRESTful Web Service
Springを何となく使ってる人が抑えるべきポイント
今さら聞けないDiとspring
これからSpringを使う開発者が知っておくべきこと
Spring Bootをはじめる時にやるべき10のこと
Spring3.1概要 データアクセスとトランザクション処理

What's hot (20)

PDF
怖くないSpring Bootのオートコンフィグレーション
PPTX
さくっと理解するSpring bootの仕組み
PDF
Form認証で学ぶSpring Security入門
PDF
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
PPTX
Spring超入門-Springと出会ってから1年半-
PPTX
初心者だった私がSpring(DIコンテナ)を分かるまで
PPTX
Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1
PPT
試験にでるSpring
PDF
REST API のコツ
PDF
Junitを使ったjavaのテスト入門
PPTX
NGINXをBFF (Backend for Frontend)として利用した話
PDF
オープンソースのAPIゲートウェイ Kong ご紹介
PDF
Rdraモデリングをしよう
PDF
Spring fest2020 spring-security
PDF
ユーザーインタビューするときは、どうやらゾンビのおでましさ
PDF
文字コードに起因する脆弱性とその対策(増補版)
PDF
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
PDF
3分でわかるAzureでのService Principal
PDF
アプリ開発で知っておきたい認証技術 - OAuth 1.0 + OAuth 2.0 + OpenID Connect -
PDF
Parser combinatorってなんなのさ
怖くないSpring Bootのオートコンフィグレーション
さくっと理解するSpring bootの仕組み
Form認証で学ぶSpring Security入門
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
Spring超入門-Springと出会ってから1年半-
初心者だった私がSpring(DIコンテナ)を分かるまで
Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1
試験にでるSpring
REST API のコツ
Junitを使ったjavaのテスト入門
NGINXをBFF (Backend for Frontend)として利用した話
オープンソースのAPIゲートウェイ Kong ご紹介
Rdraモデリングをしよう
Spring fest2020 spring-security
ユーザーインタビューするときは、どうやらゾンビのおでましさ
文字コードに起因する脆弱性とその対策(増補版)
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
3分でわかるAzureでのService Principal
アプリ開発で知っておきたい認証技術 - OAuth 1.0 + OAuth 2.0 + OpenID Connect -
Parser combinatorってなんなのさ
Ad

Viewers also liked (20)

PPTX
Spring bootで学ぶ初めてのwebアプリ開発
PDF
Spring Day 2016 springの現在過去未来
PDF
Grailsでドメイン駆動設計を実践する時の勘所
PDF
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
PDF
Lineにおけるspring frameworkの活用
PDF
Spring Day 2016 - Web API アクセス制御の最適解
PDF
楽天トラベルとSpring(Spring Day 2016)
PPTX
Cloud Foundry x Wagby
PDF
Data Microservices with Spring Cloud Stream, Task, and Data Flow #jsug #spri...
PPTX
Spring 5に備えるリアクティブプログラミング入門
PDF
Distributed tracing - get a grasp on your production
PPT
Distributed Tracing Velocity2016
PPTX
Spring CloudとZipkinを利用した分散トレーシング
PDF
Internetトラフィックエンジニアリングの現実
PDF
Business Process Modeling in Goldman Sachs @ JJUG CCC Fall 2017
PPTX
高速なソートアルゴリズムを書こう!!
PPTX
Javaアプリケーションの モダナイゼーションアプローチ
PDF
Another compilation method in java - AOT (Ahead of Time) compilation
PPTX
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
PDF
Java SE 9の紹介: モジュール・システムを中心に
Spring bootで学ぶ初めてのwebアプリ開発
Spring Day 2016 springの現在過去未来
Grailsでドメイン駆動設計を実践する時の勘所
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
Lineにおけるspring frameworkの活用
Spring Day 2016 - Web API アクセス制御の最適解
楽天トラベルとSpring(Spring Day 2016)
Cloud Foundry x Wagby
Data Microservices with Spring Cloud Stream, Task, and Data Flow #jsug #spri...
Spring 5に備えるリアクティブプログラミング入門
Distributed tracing - get a grasp on your production
Distributed Tracing Velocity2016
Spring CloudとZipkinを利用した分散トレーシング
Internetトラフィックエンジニアリングの現実
Business Process Modeling in Goldman Sachs @ JJUG CCC Fall 2017
高速なソートアルゴリズムを書こう!!
Javaアプリケーションの モダナイゼーションアプローチ
Another compilation method in java - AOT (Ahead of Time) compilation
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
Java SE 9の紹介: モジュール・システムを中心に
Ad

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

PDF
第12回rest勉強会 これまでの補足・展望編
PDF
SpringBootの研修本で学んだこと
PDF
Spring.project
PDF
Springの今
PPTX
スキトラ Spring + mybatis
PDF
Springの向かう先
PDF
進化する Web ~ Progressive Web Apps の実装と応用 ~
PDF
オープニング
PPTX
Challenge PWA!! TRY PWA4WP!
PDF
Spring知っておきたい
PPTX
UnicastWS vol.2
PPTX
Lightning componentとlightning design system
PPTX
Challenge PWA!! WordCamp Tokyo 2018
PPTX
Azure Service Fabric 概要
PDF
Rendr入門: サーバサイドで(も)動かす、Backbone.js
PDF
Force.com開発基礎
PPTX
JViews Diagrammer チュートリアル (JSF 2)
PDF
[Observability conference 2022/3/11] NewsPicks のプロダクト開発エンジニアが実践するスキルとしての SRE
PDF
Reco choku tech night #09 -reinvent2018報告会-
PDF
Java web application testing
第12回rest勉強会 これまでの補足・展望編
SpringBootの研修本で学んだこと
Spring.project
Springの今
スキトラ Spring + mybatis
Springの向かう先
進化する Web ~ Progressive Web Apps の実装と応用 ~
オープニング
Challenge PWA!! TRY PWA4WP!
Spring知っておきたい
UnicastWS vol.2
Lightning componentとlightning design system
Challenge PWA!! WordCamp Tokyo 2018
Azure Service Fabric 概要
Rendr入門: サーバサイドで(も)動かす、Backbone.js
Force.com開発基礎
JViews Diagrammer チュートリアル (JSF 2)
[Observability conference 2022/3/11] NewsPicks のプロダクト開発エンジニアが実践するスキルとしての SRE
Reco choku tech night #09 -reinvent2018報告会-
Java web application testing

More from 土岐 孝平 (7)

PDF
What's new in Spring Boot 2.6 ?
PDF
SpringベースのCloud Native Application
PDF
Microserviceの今どきのインフラを探る
PDF
OpenID Connect入門
PDF
業務システムとマイクロサービス
PDF
エッセンシャルCore springハンズオン
PPT
vFabricを触ろう
What's new in Spring Boot 2.6 ?
SpringベースのCloud Native Application
Microserviceの今どきのインフラを探る
OpenID Connect入門
業務システムとマイクロサービス
エッセンシャルCore springハンズオン
vFabricを触ろう

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