Spring 2.0M1 Released

Springの2.0M1がリリースされていました。主な内容は、こんな感じ。

  • Simplified, extensible XML configuration
  • Powerful new Spring AOP features and AspectJ 5 integration
  • Asynchronous JMS facilities enabling message-driven POJOs
  • Spring Portlet MVC, a MVC framework for JSR-168 Portlets


AspectJ5.0との統合は面白そう。XMLファイルのシンプル化もすごくありがたいです。2.0になって色々と洗練されてきた印象を受けました。ただ、これはRodが前は1.5でやるよ〜、と言っていた内容だったような。2.0になるからには、Springを使った開発に変革がおきるような(Seasarの方向性とは異なる)何かを密かに期待していたのですが、基本部分は今までと同じみたいですね。


それはともかく、内容をチェック。ChangeLogを全部見るのはきついので、JPetStoreのBean定義ファイルがどんな風に変わっているのかさくっと見てみました。


まず、DTDからXSDに変わっていますね。


次に、AspectJのPointcut表現サポート。おお、なんか良い感じです。BeanNameAutoProxyCreatorを使った場合とどう違うのでしょうか?確かに表現はシンプルになってるけど。もしかして「* *..PetStoreImpl.*(..))」の部分は、Bean定義してないクラスも適用対象になる?要チェックですね。

<aop:config>
    <aop:advisor 
         pointcut="execution(* *..PetStoreImpl.*(..))"
         advice-ref="txAdvice"/>
</aop:config>

トランザクション定義も「tx:*」を使ってシンプルに記述できるようになっています。デフォルトの属性がPROPAGATION_REQUIREDとのこと。なので、以下だと、insert*とupdate*に一致するメソッドには、PROPAGATION_REQUIREDが適用されるみたいです。なるほど。

<tx:advice id="txAdvice">
  <tx:attributes>
     <tx:method name="insert*"/>
     <tx:method name="update*"/>
     <tx:method name="*" read-only="true"/>
  </tx:attributes>
</tx:advice>

あとJDNIも「jndi:*」で記述できます。気になったのは、同じBean定義ファイルに同一のID「dataSource」の存在を許している点(以前は同一ファイル内で重複禁止、ファイルを分けた場合は後から読み込んだ定義を有効にする)。DAOからは同じ「dataSorce」で参照しているので、どうやって2つを区別しているのでしょう?

<jndi:lookup id="dataSource" 
         jndiName="java:comp/env/jdbc/jpetstore"/>
<jndi:lookup id="dataSource" 
         jndiName="java:comp/env/jdbc/jpetstore-order"/>

もうひとつ、「util:*」という記述が可能なUtilNamespaceHandlerも提供されているようですが、サンプルがなかったので何ができるのか未確認です。