JSUG勉強会に参加してきました
以下自分用のメモ
概要
- 開催場所 : Pivotal Japan
- 開催日時 : 2017-02-27(月)19:00 - 21:00
Spring for Spring Boot -Spring Bootユーザーが知るべきSpringの基礎知識-
多田 真敏氏 (株式会社カサレアル、Pivotal認定講師)
https://speakerdeck.com/masatoshitada/spring-for-spring-boot
Spring Bootから始めた人に知ってほしいSpringの基礎知識を解説
- Spring Bootは何をしているの?
- Spring vs Spring Boot
- Spring Bootになった際に、Configがなくなっただけで後は基本的に同じ
- Spring Bootの価値
- デフォルトの設定を提供してくれる。本来のアプリ開発をすぐ始められる
- Soringにおける設定 ≒ Bean定義
- Spring vs Spring Boot
- Spring の基本!Bean定義を理解しよう
- Bean ・・・ SpringのDIコンテナで管理しているインスタンス
- Bean定義=このクラスのインスタンスをBeanとして扱ってとDIコンテナに教えること
- 各種定義方法
- (1) アノテーション+コンポーネントスキャン
- `Configuration + @ComponentScan
- basePacages属性を指定しなかった場合、この@ComponentScan付与されているクラスが属しているパッケージがスキャン対象となる
- (2) メソッドによるBean定義
- Java Config内に@Beanを付与したメソッドを作成。⇒戻り値がBeanになる
- (1) アノテーション+コンポーネントスキャン
- Spring4.3以降では@Autowiredは省略可能(コンストラクタが1個だけであれば)
- Java Configの合体
- @ImportでJava Configを合体できる
- アプリが大規模になった場合に活躍する。重要。
- Spring MVC の仕組みを理解しよう
- Dispatecherですべてのリクエストを受け付けて、Controllerに処理振り分け
- ViewResolver
- ビューの論理名からビューの物理名を解決する
- 各View技術用のViewResolver実装クラスが存在する
- Thymeleafの場合はThymeleafViewResolver
- Java8TimeDialectをセットすることでDate and Time APIを解釈できるようになる
- Spring MVCが動作するにViewResolver以外にも多くのBeanが必要
- ⇒ @EnableWebMvc
- 正体は@Import
- ⇒ @EnableWebMvc
- 静的ファイルの扱い
- WebMvcConfigurerを利用してルーティング設定を追加
- 通常はWebMvcConfigurerAdaoterクラスを利用する
- WebMvcConfigurerを利用してルーティング設定を追加
- @Configurationの正体は@Component
- 正体は@Componentなアノテーション
- @Controller
- @RestController
- @Service
- @Repository
- etc
- WebApplicationInitializerでDispatcherServletの設定を記述できる
- Auto Configurationのソースを読んでSpring Bootを理解しよう
- 設定の自動化の正体
- 大量のJava Configクラスがあらかじめ用意されている
- あるクラスがクラスパス上に存在するかどうかなどの条件で、各Java Condigクラスや各@Beanメソッドを有効化/無効化している
- メッセージ
- プロパティファイル名はデフォルトは「messages.properties」
- 静的ファイル
- クラスパス直下のstaticフォルダ等が指定されている
- Bean定義カスタマイズ例
- (1) application.properties
- @COnfigurationProperiesなクラス⇒Bean定義で使われる
- (2) 自分でBean定義する
- (3) Customizerを利用する
- XxxCustomizerをBean定義すれば、Auto ConfigurationクラスがDIコンテナから拾ってくれる
- (1) application.properties
- 設定の自動化の正体
- まとめ
- 脱Spring Boot初心者となるには、Springの基礎知識が大事
- Spring Bootを使わずにアプリを作り、Auto Configurationのソースを読みながらアプリをSpring Boot化していこう
- 脱Spring Boot初心者となるには、Springの基礎知識が大事
実例で学ぶ、明日から使えるSpring Boot Tips
槙 俊明 (Pivotal)
- Spring Boot is
- Opinionated Framework on Spring Ecosystem
- できるだけSpring Boot Wayに乗るべき(むりやり既存のやり方を持ち込むとひずみが生じる)
- Error画面
- 以下を用意するだけで良い
- src/main/resources/static/error/403.html, 404.html, 40x.html, 500.html, 50x.html
- 動的指定したい場合は以下
- src/main/resources/templates/error/403.
, 404. , 40x. , 500. , 50x.
- src/main/resources/templates/error/403.
- application-default.properties
- server.error.include-stacktrace=always を指定すると ${trace} にStackTraceが入る
- @ControllerAdviceを指定して、@ExceptionHandlerを使うと全Controllerに適用される
- 以下を用意するだけで良い
- profileの指定方法
- アプリの引数
- システムプロパティ
- 環境変数
- Spring Data RESTによるREST API
- Repository -> REST API
- 永続化層に対する操作に対するREST API(HTTP操作)を自動的に提供してくれる
- Controllerすら書かなくてよくなる
- コード量が大幅に減る
- FooRepository#finadName -> /foos/search/findByName?name={name}
- @RestResource(exported = false) <- 外部に公開したくないエンドポイントの場合
- その他
- PagingAndSortingRepository
- RepositoryEventHandler
- Repository操作に対するイベントハンドラ。業務ロジックなどを書くことができる
- トランザクション境界
- 普通のアプリではServiceでは、@Transactional
- Spring Data RESTでは、AOPで強引にトランザクション境界を引き延ばせる。が、もしかしたらバッドノウハウかも。
- CSRF対策
- Spring Securityを導入するだけでCSRF対策される
- Ajax / SPA の場合は?
- CookieCsrdTokenRepositoryを使用する(デフォルトはHttpSessionCsrfTokenRepository)
- AngularJS
- Axios
- PromiseベースのHTTPクライアント
- X-XSRF-TOKENという名前のCookieが入っていたらHTTPリクエス
- @EnableOAuth2Sso
- token = Authoraization Code
- PrincialExtractor
- ユーザ情報の作り方などをカスタマイズできる
- GitHub以外でもOK
- Authoraization Server ・・・ @EnableAuthoraizationServer
- アカウントを一元管理できる
- @ConditionalOnProperty
- 一つのinterfaceに対して複数の実装を使い分ける方法の一つ
- 設定の内容に応じて実装が切り替えられる
- @COnfigurationProperties
- TypeSafeなプロパティ
- ConfigurationProcessorを使ってメタ情報も吐くようにしたほうが良い
- Spring Boot Acturator
- 1.5からSpring Actuatorでデフォルトでセキュリティ認可が行われる(ROLE_ACTUATOR)