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を使う開発者が知っておくべきこと
PPTX
さくっと理解するSpring bootの仕組み
PDF
怖くないSpring Bootのオートコンフィグレーション
PDF
今さら聞けないDiとspring
PDF
これから始めるSpringのwebアプリケーション
PDF
Spring Bootをはじめる時にやるべき10のこと
PPTX
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
入社1年目のプログラミング初心者がSpringを学ぶための手引き
これからSpringを使う開発者が知っておくべきこと
さくっと理解するSpring bootの仕組み
怖くないSpring Bootのオートコンフィグレーション
今さら聞けないDiとspring
これから始めるSpringのwebアプリケーション
Spring Bootをはじめる時にやるべき10のこと
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)

What's hot (20)

PDF
Junitを使ったjavaのテスト入門
PPT
Spring3.1概要 データアクセスとトランザクション処理
PDF
Javaのログ出力: 道具と考え方
PDF
イミュータブルデータモデル(入門編)
PPT
Springを使ったwebアプリにリファクタリングしよう
PDF
イミュータブルデータモデル(世代編)
PPTX
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
PDF
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
PDF
ドメイン駆動設計のための Spring の上手な使い方
PDF
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
PDF
Spring Fest 2018 Spring Bootで作るRESTful Web Service
PPTX
世界一わかりやすいClean Architecture
KEY
やはりお前らのMVCは間違っている
PDF
MagicOnion入門
PPTX
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
PPTX
Redisの特徴と活用方法について
PDF
イミュータブルデータモデルの極意
PDF
Practical migration from JSP to Thymeleaf
PDF
そんなトランザクションマネージャで大丈夫か?
Junitを使ったjavaのテスト入門
Spring3.1概要 データアクセスとトランザクション処理
Javaのログ出力: 道具と考え方
イミュータブルデータモデル(入門編)
Springを使ったwebアプリにリファクタリングしよう
イミュータブルデータモデル(世代編)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
ドメイン駆動設計のための Spring の上手な使い方
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
Spring Fest 2018 Spring Bootで作るRESTful Web Service
世界一わかりやすいClean Architecture
やはりお前らのMVCは間違っている
MagicOnion入門
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
Redisの特徴と活用方法について
イミュータブルデータモデルの極意
Practical migration from JSP to Thymeleaf
そんなトランザクションマネージャで大丈夫か?
Ad

Viewers also liked (6)

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

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

PDF
Spring知っておきたい
PPTX
Azure Machine Leaning Workbench の使い方
PDF
Spring Boot + Doma + AngularJSで作るERP #jjug_ccc #ccc_r12
PDF
SpringBootの研修本で学んだこと
PDF
Spring Boot + Doma + AngularJSで作るERP 〜JavaQneバージョン〜 #jqfk
PPTX
スキトラ Spring + mybatis
PDF
Pivotal Trackerでアジャイルなプロジェクト管理
PDF
ruby、sinatraで作るfacebookアプリ
PDF
co-meeting_meetup_vol1_利用事例紹介(newデイシス)
PDF
最近のSpringFramework2013 #jjug #jsug #SpringFramework
PDF
CEDEC2015講演 チーム開発をスムーズにするために
PDF
地図を捨ててコンパスを頼りに進め
PDF
地図を捨ててコンパスを頼りに進め
PDF
Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティス
PDF
Azureを使って手軽にブラウザテストの自動化をはじめよう
PDF
Selenium Antipatterns
PPTX
Device Farm を使ったスマホアプリの自動テスト
PDF
エッセンシャルCore springハンズオン
PDF
a-blogcsm な寺子屋 2 in Okazaki
PPTX
Jsugプレゼン資料new
Spring知っておきたい
Azure Machine Leaning Workbench の使い方
Spring Boot + Doma + AngularJSで作るERP #jjug_ccc #ccc_r12
SpringBootの研修本で学んだこと
Spring Boot + Doma + AngularJSで作るERP 〜JavaQneバージョン〜 #jqfk
スキトラ Spring + mybatis
Pivotal Trackerでアジャイルなプロジェクト管理
ruby、sinatraで作るfacebookアプリ
co-meeting_meetup_vol1_利用事例紹介(newデイシス)
最近のSpringFramework2013 #jjug #jsug #SpringFramework
CEDEC2015講演 チーム開発をスムーズにするために
地図を捨ててコンパスを頼りに進め
地図を捨ててコンパスを頼りに進め
Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティス
Azureを使って手軽にブラウザテストの自動化をはじめよう
Selenium Antipatterns
Device Farm を使ったスマホアプリの自動テスト
エッセンシャルCore springハンズオン
a-blogcsm な寺子屋 2 in Okazaki
Jsugプレゼン資料new

More from 土岐 孝平 (8)

PDF
What's new in Spring Boot 2.6 ?
PDF
SpringベースのCloud Native Application
PDF
Spring fest2020 spring-security
PDF
Microserviceの今どきのインフラを探る
PDF
OpenID Connect入門
PDF
業務システムとマイクロサービス
PPT
試験にでるSpring
PPT
vFabricを触ろう
What's new in Spring Boot 2.6 ?
SpringベースのCloud Native Application
Spring fest2020 spring-security
Microserviceの今どきのインフラを探る
OpenID Connect入門
業務システムとマイクロサービス
試験にでるSpring
vFabricを触ろう

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