SlideShare a Scribd company logo
10
Most read
11
Most read
15
Most read
1
Springを何となく使ってる人が
抑えるべきポイント
2016/10/05
日本Springユーザ会
土岐 孝平
自己紹介
• 土岐 孝平
• Springを使用したシステム開発の支援
• JavaやSpringの研修の講師
• 書籍の執筆
2
発表の概要
• Springを言われた通り何となく使っていませんか?
– 上手く動かないときの対応ができない
– 応用が利かない
– 面白くない
• 主要なポイントを押さえて、開発を面白くしましょう
3
主要なポイント
• Beanのコンフィグレーション
– コンフィグレーション方法の種類と使い分け
• DI・AOP
– 使いどころ
– 同じオブジェクトが使われている
– インタフェースは必須じゃない
• データアクセス
– コネクション・トランザクション周りの仕組み
• Spring MVC
– 画面周りの処理の流れ
• Spring Security
– 認証・認可の仕組み
• テスト
– サーバを起動しなくてもBeanをテストできる
• Spring Boot
– Spring Bootが行っていること
4
コンフィグレーションの方法
• コンフィグレーションの方法は3種類から選べます
– XML
– アノテーション
– JavaConfig
5
Beanのコンフィグレーションのコンフィグレーションのコンフィグレーションのコンフィグレーション
DIコンテナコンテナコンテナコンテナ
:Foo
結果結果結果結果は同じは同じは同じは同じ
※ DIコンテナが
管理するオブジェクトのことを
Beanという
それぞれの特徴
メリット デメリット
XML
・プログラムとBean定義が分離、
一元的に記述(環境ごとに定義の
切替が容易)
・定義を変えても再ビルドが不要
(※)
・Beanが増えるとメンテが大変(リ
ファクタリングとか)
アノテー
ション
・記述が楽
・プログラムとBean定義が混在、
Bean定義が分散(定義の切替が困
難)
Java
Config
・プログラムとBean定義が分離、
一元的に記述(環境ごとに定義の
切替が容易)
・タイプセーフ
・Beanが増えるとメンテが大変(リ
ファクタリングは楽)
6
Beanのコンフィグレーションのコンフィグレーションのコンフィグレーションのコンフィグレーション
※実際には、本番環境でXMLだけ変えてそのまま動かすことは危険なのと、VCSのXML
と乖離するため、結局はVCSにコミットしてビルドしてテストした後にデプロイするはず
一般的と思われる使い分け
• 業務個別のBean(Controller、Service、Dao)はアノテーション
– Beanの数が増えてもメンテナンスが楽
• 裏方のBeanはXMLもしくはJavaConfig
– 環境ごとにBean定義を用意&一元化できて切替が容易
– サードパーティのクラスのBeanが多い
7
:Controller :Service :Dao
:Transaction
Manager
:DataSource
:View
Resolver
本番用 テスト用
業務個別
裏方 インジェクション インジェクション
Beanのコンフィグレーションのコンフィグレーションのコンフィグレーションのコンフィグレーション
:Transaction
Manager
:DataSource
:View
Resolver
DI・AOPの使いどころ
• DI
– 作成するクラスすべてをBeanで管理する訳ではない
– Controller、Service、Daoは、BeanにしてDIで紐づける
• レイヤーの間で処理を挟み込んだり、依存オブジェクトの切り替えを容易にする
– 処理の度にオブジェクトが生成され個別のフィールド値を設定するEntityやDTOは
Beanにしない
• AOP
– レイヤーの間にAOPで共通処理を挟み込む
• BeanにしかAOPできないという事情もある
– 業務的な処理は基本的にAOPは使わない
8
:Controller :Service :Dao
:DTO :Entity
アプリで
生成
DI・・・・AOP
AOPの処理
同じオブジェクトが使われている
9
• リクエストの度にController・Service・Daoのオブジェクトが作成される訳
では無い
– メモリの浪費が防げる。リクエスト間でデータ共有が可能(キャッシュなど)
– スレッドセーフにする必要がある
:FooController :FooService :FooDaoリクエストB
リクエストA
リクエストB
リクエストC
DI・・・・AOP
:FooController :FooService :FooDao
:FooController :FooService :FooDao
:FooController :FooService :FooDao
インタフェースは必須じゃない
• インタフェースを介さなくてもDIは可能
– AOPも可能
• 用途の例
– 各レイヤーの中の補助的なBean
10
Fooクラス Barクラス
DIコンテナ
Barオブジェクトを生成Fooオブジェクトを生成して、
Barオブジェクトをインジェクション
Controller Service Dao
Service
Helper
Controller
Helper
DI・・・・AOP
コネクション・
トランザクション周りの仕組み
• コネクションの取得・解放、トランザクションの開始・終了はSpringが行う
– アプリで上記のコードは出てこない
– コネクションを引数で渡さなくてよい
11
foo
:Controller :Proxy :Service :Dao
:データアク
セス機能
foo
bar
baz
SQL
ThreadLocal
:Connection
connect、、、、begin
commit、、、、close
データアクセスデータアクセスデータアクセスデータアクセス
画面周りの処理の流れ
12
Controller
Model
Dispatcher
Servlet
Handler
Mapping
Handler
Adapter
View
Resolver
View
ブラウザ
①
②
③ ④
⑤
⑥
⑦
⑧⑨
Controllerを
特定
引数の値を
用意
Viewの形式・
ファイルを特定
全体の処理
を制御
• HttpServletを継承したDispacherServletが全体の
処理を制御している
Spring MVC
認証・認可の仕組み
• 認証と、URLの認可はServletFilterで行われている
– DispacherServletに依存していない(Spring MVCに依存しない)
• 認可の主な対象は、URL・メソッド・画面描画の3種類
13
@PreAuthorize("hasRole('ROLE_AD
MIN')")
public void foo(){
・・・
}
認証認証認証認証のServletFilter
<authorize
access="hasRole('ROLE_ADMIN')">
・・・
</authorize>
メソッドの認可認可認可認可の
Proxy
画面描画の認可認可認可認可の
カスタムタグ
HttpSession/ThreadLocal
SecurityContext
ユーザ 権限
URLの認可認可認可認可の
ServletFilter
Spring Security
<intercept-url pattern="/admin/**"
access="hasRole('ROLE_ADMIN')"/>
・・・
サーバを起動しなくてもBeanをテストできる
• Springのテストサポート機能を使うと便利
14
・記述が簡潔・記述が簡潔・記述が簡潔・記述が簡潔
・さまざまな便利機能が利用できる・さまざまな便利機能が利用できる・さまざまな便利機能が利用できる・さまざまな便利機能が利用できる
DIコンテナのキャッシュコンテナのキャッシュコンテナのキャッシュコンテナのキャッシュ
テストメソッドのトランザクション制御テストメソッドのトランザクション制御テストメソッドのトランザクション制御テストメソッドのトランザクション制御
・・・・・・・・・・・・
Spring Test
Spring Bootが行っていること
• 必要なJarファイルのダウンロードや、裏方のBeanのコンフィグレーション、組込
サーバ(Tomcat)の実行を自動で行ってくれる
• 業務個別のBeanのプログラムの作りは、Bootを使っても使わなくても変わらない
• 組込じゃないTomcatにデプロイすることも可能
15
:Controller :Service :Dao
裏方のBean
:Tomcat
組込サーバ
必要なJarファイル
Spring
のjar
JPAの
jar
JUnit
のjar ・・・
Bootが用意
業務個別のBean
・・・
Spring Boot
Tomcat
のjar
:Transaction
Manager
:DataSource
:View
Resolver
接続先などの
プロパティ
さいごに
• 書籍を購入して、スライドの内容を再確認しましょう
• おすすめの書籍
16
[改訂新版改訂新版改訂新版改訂新版]Spring入門入門入門入門 Spring徹底入門徹底入門徹底入門徹底入門
17
ご清聴ありがとうございました
18
ライセンスについて
• JSUGマスコットアイコン(本スライド左下)が残されている場合に限り、本作品(またそれを元にした派生
作品)の複製・頒布・表示・上演を認めます。
• 非商用目的に限り、本作品(またそれを元にした派生作品)の複製・頒布・表示・上演を認めます。
• 本作品のライセンスを遵守する限り、派生作品を頒布することを許可します。

More Related Content

PDF
入社1年目のプログラミング初心者がSpringを学ぶための手引き
土岐 孝平
 
PDF
これからSpringを使う開発者が知っておくべきこと
土岐 孝平
 
PDF
これから始めるSpringのwebアプリケーション
土岐 孝平
 
PDF
怖くないSpring Bootのオートコンフィグレーション
土岐 孝平
 
PDF
今さら聞けないDiとspring
土岐 孝平
 
PPTX
さくっと理解するSpring bootの仕組み
Takeshi Ogawa
 
PDF
新入社員のための大規模ゲーム開発入門 サーバサイド編
infinite_loop
 
PDF
REST API のコツ
pospome
 
入社1年目のプログラミング初心者がSpringを学ぶための手引き
土岐 孝平
 
これからSpringを使う開発者が知っておくべきこと
土岐 孝平
 
これから始めるSpringのwebアプリケーション
土岐 孝平
 
怖くないSpring Bootのオートコンフィグレーション
土岐 孝平
 
今さら聞けないDiとspring
土岐 孝平
 
さくっと理解するSpring bootの仕組み
Takeshi Ogawa
 
新入社員のための大規模ゲーム開発入門 サーバサイド編
infinite_loop
 
REST API のコツ
pospome
 

What's hot (20)

PPTX
Spring超入門-Springと出会ってから1年半-
Ryosuke Uchitate
 
PDF
[JJUG CCC 2021 Spring]Eclipse ユーザのための VSCode のススメ
Satoshi Takami
 
PDF
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
 
PDF
Spring Fest 2018 Spring Bootで作るRESTful Web Service
WataruOhno
 
PDF
MagicOnion入門
torisoup
 
PDF
目grep入門 +解説
murachue
 
PDF
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
 
PPTX
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
 
PDF
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
Mikiya Okuno
 
PDF
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
 
PDF
オンラインゲームの仕組みと工夫
Yuta Imai
 
PPTX
UniRxでMV(R)Pパターン をやってみた
torisoup
 
PDF
オブジェクト指向エクササイズのススメ
Yoji Kanno
 
PDF
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
 
PDF
Python 3.9からの新定番zoneinfoを使いこなそう
Ryuji Tsutsui
 
PDF
関数型プログラミングのデザインパターンひとめぐり
Kazuyuki TAKASE
 
PDF
Azure Database for PostgreSQL 入門 (PostgreSQL Conference Japan 2021)
Keisuke Takahashi
 
PDF
できる!並列・並行プログラミング
Preferred Networks
 
PDF
マルチテナント化で知っておきたいデータベースのこと
Amazon Web Services Japan
 
Spring超入門-Springと出会ってから1年半-
Ryosuke Uchitate
 
[JJUG CCC 2021 Spring]Eclipse ユーザのための VSCode のススメ
Satoshi Takami
 
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
 
Spring Fest 2018 Spring Bootで作るRESTful Web Service
WataruOhno
 
MagicOnion入門
torisoup
 
目grep入門 +解説
murachue
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
 
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
Mikiya Okuno
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
 
オンラインゲームの仕組みと工夫
Yuta Imai
 
UniRxでMV(R)Pパターン をやってみた
torisoup
 
オブジェクト指向エクササイズのススメ
Yoji Kanno
 
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
 
Python 3.9からの新定番zoneinfoを使いこなそう
Ryuji Tsutsui
 
関数型プログラミングのデザインパターンひとめぐり
Kazuyuki TAKASE
 
Azure Database for PostgreSQL 入門 (PostgreSQL Conference Japan 2021)
Keisuke Takahashi
 
できる!並列・並行プログラミング
Preferred Networks
 
マルチテナント化で知っておきたいデータベースのこと
Amazon Web Services Japan
 
Ad

Viewers also liked (6)

PPTX
インターフェイスによるオブジェクト指向設計
Akineko Shimizu
 
PDF
Iocコンテナについて
Akio Terayama
 
PDF
Testing Spring MVC and REST Web Applications
Sam Brannen
 
PDF
Testing Web Apps with Spring Framework
Dmytro Chyzhykov
 
PDF
(旧版) オープンソースライセンスの基礎と実務
Yutaka Kachi
 
PDF
良質なコードを高速に書くコツ
Shunji Konishi
 
インターフェイスによるオブジェクト指向設計
Akineko Shimizu
 
Iocコンテナについて
Akio Terayama
 
Testing Spring MVC and REST Web Applications
Sam Brannen
 
Testing Web Apps with Spring Framework
Dmytro Chyzhykov
 
(旧版) オープンソースライセンスの基礎と実務
Yutaka Kachi
 
良質なコードを高速に書くコツ
Shunji Konishi
 
Ad

More from 土岐 孝平 (11)

PDF
What's new in Spring Boot 2.6 ?
土岐 孝平
 
PDF
SpringベースのCloud Native Application
土岐 孝平
 
PDF
Spring fest2020 spring-security
土岐 孝平
 
PDF
Microserviceの今どきのインフラを探る
土岐 孝平
 
PDF
OpenID Connect入門
土岐 孝平
 
PPT
Springを使ったwebアプリにリファクタリングしよう
土岐 孝平
 
PDF
業務システムとマイクロサービス
土岐 孝平
 
PDF
エッセンシャルCore springハンズオン
土岐 孝平
 
PPT
試験にでるSpring
土岐 孝平
 
PPT
Spring3.1概要 データアクセスとトランザクション処理
土岐 孝平
 
PPT
vFabricを触ろう
土岐 孝平
 
What's new in Spring Boot 2.6 ?
土岐 孝平
 
SpringベースのCloud Native Application
土岐 孝平
 
Spring fest2020 spring-security
土岐 孝平
 
Microserviceの今どきのインフラを探る
土岐 孝平
 
OpenID Connect入門
土岐 孝平
 
Springを使ったwebアプリにリファクタリングしよう
土岐 孝平
 
業務システムとマイクロサービス
土岐 孝平
 
エッセンシャルCore springハンズオン
土岐 孝平
 
試験にでるSpring
土岐 孝平
 
Spring3.1概要 データアクセスとトランザクション処理
土岐 孝平
 
vFabricを触ろう
土岐 孝平
 

Springを何となく使ってる人が抑えるべきポイント