Spring Frameworkの新しいバージョンバージョン3.0が本日(2009年12月16日)リリースされた。InfoQではSpring FrameworkプロジェクトのテクニカルリードJuergen Hoeller氏と話し、このリリースについてさらに詳しく教わるとともに、それによってSpring製品ラインにもたらされる変化について聞いた。
Hoeller氏はSpring 3.0で新たに含まれることになった新しい主要な機能について次のように述べた:
- Java 5が必要になった - コアAPI群は、ジェネリクスやアノテーションといったJava 5の機能を利用するようにアップデートされており、その結果、Spring 3.0はJava 5以降を必要とする
- Spring Expression Language (SpEL) - JSFのUnified ELと同様に、リッチな表現の構築が非常に簡略化された
- アノテーションベースコンポーネントのさらなるサポート -
@Configuration
,@Bean
や@DependsOn
のようなSpring JavaConfig機能のいくつかがコアフレームワークに移された。 - 制約アノテーションを用いた宣言的モデル検証 - JSR 303のサポートが追加され、
@NotNull
や@Max(23)
といったアノテーションを用いた検証規則をbeanに追加することができる - Spring MVCにおける包括的RESTサポート - RESTfulサーバとクライアント構築のサポートが追加された
- Java EE 6サポート - JPA 2.0やJSF 2.0といったJava EE 6機能の多くがサポートされ、TomcatやJ2EE 1.4のようなJava EE 6準拠でないコンテナ上でも機能する
- JSR 330サポート - JSR 330により導入された
javax.inject
アノテーションがサポートされた - アノテーションベース書式 -
@DateFimeFormat(iso=ISO.DATE)
や@NumberFormat(style=Style.CURRENCY)
といったアノテーションを用いてbeanフィールドは自動的にフォーマットされ変換される
A 包括的な変更履歴とリファレンスドキュメントも利用可能である。
Hoeller氏はSpELについて少しだけ詳細に触れた:
SpELはUnified ELに従った構文を持つリッチな表現言語です。Unified ELがJSFにおける表現に利用されるのと全く同様です。私たちは特別な機能を持つ独自の表現パーサを持ち、それをbean定義設定に使うだけでなく、Spring Integrationのようなプロジェクトで利用するためにも活用しています。Springコアでは、"#{...}"という表現はXML bean定義や@Valueアノテーションといった多くの場所で使われ、動的に名前によって他のbeanを参照したり、簡潔なやり方でそのプロパティの参照を解除したりしています。
例えば、次のXMLブロック(3.0ドキュメントから)はSpELを用いてSpring beanのプロパティをJVMシステムプロパティから読むことで設定するために利用している:
<bean class="mycompany.RewardsTestDatabase"> <property name="databaseName" value="#{systemProperties.databaseName}"/> <property name="keyGenerator" value="#{strategyBean.databaseKeyGenerator}"/> </bean>
新しいRESTサポートについても少しだけ説明されている:
RestサポートをSpring MVCの世界にもたらし、MVCユーザの手の中に新しい強力な機能を持ち込むことが私たちの挑戦でした。私たちは、パス変数抽出、コンテントネゴシエーションに対して、ネイティブなMVCのサポートを行うことがここでは進むべき正しい道であると決心しました - Spring MVCの力を考慮して、それを基本的なアーキテクチャを壊すことなく次の段階に進めるためです。これはうまくいき、既存のSpring MVCアプリケーションにREST機能を追加することも簡単にできます。
私たちは、ウェブユーザインターフェースをREST規約に従わせることに最も焦点をあてています。その次に、Spring MVC上でのRESTベースウェブサービスに対する関心の増大への対応です。今やSpringコアの一部となったOXM(Object/XML Mapping)モジュールとの組み合わせにおいては特に関心が高まっています。最後に、REST指向のバックエンドサーバとのプログラム上でのやりとりのために、SpringスタイルのRestTemplateクラスの形でクライアントサイドのサポートを提供しています。
Spring 2.5を利用していたり、2.5リリースで採用されたアノテーションベースのスタイルに従うようにコードをアップデートしているのなら、アップデートはスムーズに行われるはずである - 新しい機能は3.0にアップグレードしたあとで、使うかどうかを決めればよいし、基本的なアーキテクチャの変更は不要である。フォームコントローラクラス階層のような古いものを利用していても3.0ではまだサポートされているが、廃止予定のため非推奨となっている。新しい3.0の機能を利用するには、アノテーションベースの@MVCスタイルへの移行が必要である。Spring 2.0ユーザでもコードの99%は引き続き動作するはずであるが、Apache Commons AttributesやWebLogic 8.1、WebSphere 5.1サポートといった古いコンポーネントは削除されている。
Spring Frameworkの将来の計画についてたずねた際、Hoeller氏は開発はSpring Integration、Spring Web Flow、SpringSource dm Server、Spring RooといったSpring製品ライン上の他のプロジェクトに非常に影響され続けるだろうと述べた。3.1リリースでは、その機能群はSpring Integration 2.0とSpring Web Flow 3.0に強く影響されることになり、第一級カンバセーション管理、スコープの拡張サポート、アノテーションベースコンポーネントモデルの刷新が計画されている。2010年中頃に3.1のリリースが計画されており、その後、3.2リリースが行われる予定になっているが、3.2に対する具体的な計画はまだ最終決定されてはいない。