最近のspringframework2013 #jjug #jsug #springframework
TRANSCRIPT
最近のSpringFramework
JJUG ナイト・セミナー 「ビール片手にLT&納涼会2013/08/19
槙 俊明 (@making)
自己紹介• @making
• 大手SIerでR&D
• JJUG幹事
• 金魚本(http://amzn.to/JavaEE6)を一部翻訳
• なぜか畑違いのBootstrap3入門の本書いています
今日のコンテンツ
• SpringFrameworkとは
• 最近のSpring Ecosystemを紹介
• オススメ構成でWebアプリをQuick Start
SpringFrameworkとは• Javaでエンタープライズ開発するためのフルスタックフレームワーク
• 2004年から開発
• DI, AOP, Tx, Web(MVC), DataAccess, Security, Batch, Integration
• 重厚なJavaEEのアンチテーゼとして生まれたが、最近は逆転気味・・
• 一貫性のあるポリシー
• 2013年 開発元VMWare → Pivotalにスピンアウト
• 2013年 Springの象徴であるRob Jonsonが退社→TypeSafeへ
• 現在Spring4開発中
• Java8, JavaEE7サポート(WebSocket等)
http://bit.ly/Spring3Book
Springは今も進化中
Spring Ecosystemの紹介
Spring Ecosystem
Web
Base
DataAccess Batch EnterpriseIntegration
Security
IDE
RAD Starter
Social
Spring MVC
Spring WebFlow
Spring Mobile
Spring Roo
Spring Data JPA
Spring DataMongoDB
Spring Boot
SpringSource Tool Suite (STS)
Spring SocialTwitter
Spring SocialFacebook
Spring SocialGithub
Big Data
Spring Data Rest
Spring BatchSpring
Integration
Spring DI Spring AOP
Spring Security
Spring SecurityOAuth
Spring XD
Spring Ecosystem
Web
Base
DataAccess Batch EnterpriseIntegration
Security
IDE
RAD Starter
Social
Spring MVC
Spring WebFlow
Spring Mobile
Spring Roo
Spring Data JPA
Spring DataMongoDB
Spring Boot
SpringSource Tool Suite (STS)
Spring SocialTwitter
Spring SocialFacebook
Spring SocialGithub
Big Data
Spring Data Rest
Spring BatchSpring
Integration
Spring DI Spring AOP
Spring Security
Spring SecurityOAuth
Spring XD
今日のスコープ
Spring DI x AOP
• 成熟度:★★★ version: 3.2.4.RELEASE
• SpringEcosystemのコア
• JavaConfigサポート(@Configuration,
@Bean)
• No XML hell!
• JSR-330サポート(@Inject, @Named)
コード例
scope=singletonになるので注意
Spring MVC• 成熟度:★★★ version: 3.2.4.RELEASE
• アクションベースな簡易なMVC Webフレームワーク
• Strutsからの移行も容易
• アノテーションで簡単リクエストマッピング(JAX-RSとほとんど同じ)
• ControllerとViewが奇麗に分離されるので、色々な出力形式に対応
• RESTもサポート(@RequestBody, @ResponseBody)
• JavaConfigサポート(web.xmlもなくせる)
コード例
コード例(REST版)
Spring Security• 成熟度:★★★ version: 3.1.4.RELEASE
• 設定ファイルベースで認証・認可
• カスタマイズ性も高い
• Form認証、Basic認証、JAAS認証、OpenID認証、LDAP認証、CAS認証・・・
• ユーザー情報は、DB、メモリ、設定ファイル・・・から
• URL認可、アノテーションでメソッド認可、JSPタグ認可
• パスワードエンコード
• SHA-2+ソルト+ストレッチのような汎用アルゴリズムだけでなくBCryptのようなパスワード用アルゴリズムもサポート(BCrypt推奨)
• 3.2からJavaConfigサポート
コード例
• 時間がないので略・・
Spring Security OAuth• 成熟度:★☆☆ version: 1.0.0.RELEASE
• Spring SecurityにOAuth1, OAuth2による認証・認可機能を追加
• OAuth Provider
• grant_type=authorization_code,implicit,refresh_token,client_credentials, passwordの認証サーバーを設定ファイルのみで実現
• カスタムgrant_type
• OAuth Client
• REST Clientの拡張
• エラーメッセージやカスタムヘッダーなどの拡張性が乏しい
コード例
• 時間がないので略・・
Spring Data• 成熟度:★★☆
• データアクセスの抽象化ライブラリ
• オブジェクトマッピング、Repository、Templateを提供
• いろいろなデータストアをサポートするサブプロジェクトからなる
• Spring Data Commons
• Spring Data JPA
• Spring Data MongoDB, Redis, Neo4j, REST, Hadoop, HBase, Solr, ...
• 各データストアにRepositoryやTemplateを提供してBoilerplateをなくす
従来のJPAプログラミング
毎回同じようなコード・・・→
Spring Data JPAを使うと・・
• たったこれだけ!
• CRUD系のメソッド、ページング・ソート処理は自動で実装される
• JPAプログラミングの簡素化!
Spring Data REST
• 成熟度:★☆☆ version: 1.0.0.RELEASE
• Spring DataのRepositoryをREST APIにエクスポート(@RestResource)
• 現在はSpringMVCのみサポートしていrが、将来的にはServlet非依存を目指している
• HypermediaLinkの作成
コード例
Spring Boot• 成熟度:☆☆☆ version: 0.5.0-M1
• Springアプリケーションを高速に開発して起動するためのプロジェクト?
• スタンドアローンでアプリケーションを起動できる(java -jar)
• サーバー組み込み
• Traditionalなwar作成も可能
• ApplicationContext作成不要
• オススメ設定のautoconfigure群
• 色々なpreconfiguredなJavaConfigが用意されており、特定の条件を満たすと読み込まれる
• 特定のクラスがクラスパス上にある場合など(@ConditionalOnClass)
• コード自動生成系でもRADツールでもない
コード例
起動例• mvn package
• java -jar xxx.jar
オススメ構成でWeb
アプリをQuickStart
Webアプリのオススメ構成
Spring MVC Spring(DI, AOP, Tx)
Spring Data JPA
Spring Security
Browser/Client
UI & Presentation Layer Service Layer Persistence Layer
JPA
DB
Webアプリの雛形を使ってQuick Start
• http://bit.ly/SpringTemplate
• STSのproject template機能でアプリの雛形生成
• Spring MVC + Spring Data JPA + Spring Security + Bootstrap3を使用したBest PracticeベースドなCRUDアプリが1分でできます(ダウンロード時間除く)
おわりに
• Springはまだまだ進化中
• Bootstrap3本でたら買ってください!