Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

9,074 views

Published on

Springのポイントを押さえて開発を面白くしましょう。

Published in: Software
  • Be the first to comment

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

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

×