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

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Spring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjugSpring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjug
 
Spring超入門-Springと出会ってから1年半-
Spring超入門-Springと出会ってから1年半-Spring超入門-Springと出会ってから1年半-
Spring超入門-Springと出会ってから1年半-
 
Spring Fest 2018 Spring Bootで作るRESTful Web Service
Spring Fest 2018 Spring Bootで作るRESTful Web ServiceSpring Fest 2018 Spring Bootで作るRESTful Web Service
Spring Fest 2018 Spring Bootで作るRESTful Web Service
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
Spring Data RESTを利用したAPIの設計と、作り直しまでの道のり
Spring Data RESTを利用したAPIの設計と、作り直しまでの道のり Spring Data RESTを利用したAPIの設計と、作り直しまでの道のり
Spring Data RESTを利用したAPIの設計と、作り直しまでの道のり
 
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
AngularとSpring Bootで作るSPA + RESTful Web ServiceアプリケーションAngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
 
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
 
SpringBootTest入門
SpringBootTest入門SpringBootTest入門
SpringBootTest入門
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
 
Spring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のことSpring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のこと
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみようドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
 
Mavenの真実とウソ
Mavenの真実とウソMavenの真実とウソ
Mavenの真実とウソ
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
 
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
 

Destacado

インターフェイスによるオブジェクト指向設計
インターフェイスによるオブジェクト指向設計インターフェイスによるオブジェクト指向設計
インターフェイスによるオブジェクト指向設計
Akineko Shimizu
 

Destacado (6)

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

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

co-meeting_meetup_vol1_利用事例紹介(newデイシス)
co-meeting_meetup_vol1_利用事例紹介(newデイシス)co-meeting_meetup_vol1_利用事例紹介(newデイシス)
co-meeting_meetup_vol1_利用事例紹介(newデイシス)
Satoshi Furuichi
 
最近のSpringFramework2013 #jjug #jsug #SpringFramework
最近のSpringFramework2013 #jjug #jsug #SpringFramework最近のSpringFramework2013 #jjug #jsug #SpringFramework
最近のSpringFramework2013 #jjug #jsug #SpringFramework
Toshiaki Maki
 
a-blogcsm な寺子屋 2 in Okazaki
a-blogcsm な寺子屋 2 in Okazakia-blogcsm な寺子屋 2 in Okazaki
a-blogcsm な寺子屋 2 in Okazaki
Etsushi Ishii
 

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

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

Más de 土岐 孝平

試験にでるSpring
試験にでるSpring試験にでるSpring
試験にでるSpring
土岐 孝平
 
Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理
土岐 孝平
 

Más de 土岐 孝平 (10)

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

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