Spring Roo の構造

今日はSpring Roo でプロジェクトを作成してみました。作成して動き出すまではあっという間、だったもののなんだかファイルが自動的にいっぱいできてよくわからなかったし、どれを編集してよいものやらわからないので、Rooの構造について読んだことをまとめてみます。

元記事はhttp://static.springsource.org/spring-roo/reference/html/index.html

  • Rooとは
    • エンタープライズアプリケーションを簡単にJavaで作成するためのツール
    • rooのシェルを起動して実行させておく
    • ソース、プロジェクトを変更すると、Rooが自動的に設定を変更してくれる
    • Rooは実行環境やIDEプラグインアノテーションを処理するライブラリ、ではない。
    • Rooは「add-on」ベースの構造。
  • Rooの構造
    • layer はentityとwebのみ。serviceは必要にして追加してもいいが、DAOはいらないはず。
    • AspectJとSpring
    • RooではAspectJの"inter-type declaration" =ITD機能を使用している
  • ITD
    • entityとfieldを作成する。と、 javaクラスにはfieldとアノテーションがつく
    • アノテーションはソースレベルのretention
    • Rooのアノテーションの名前にはかならずRooがつく
    • ITDにより.ajファイルが自動的に作成される
    • クラスに追加するメソッドなんかの定義がされている。
    • javaファイルと.ajファイルの定義なんかをみながら、適切に.classファイルが作成される
    • javapコマンドで最終的にどんなクラスが作成されたか確認することができる
    • rooを起動しておけば、javaファイルを編集したりするごとに.ajファイルが自動的に更新されることを確認できる。
  • Spring
    • Spring Aspects, DI やあのテーションによるコンポーネントスキャンなんかもRooはとりいれている。
    • Spring Framework3のMVC機能も利用。conversion APIや、web content negotiation view resolution(?)やRESTのsupportも。
    • RooはSpringの設定ファイル類を自動で修正はしない。シェルコマンド実行時にのみ変更、追加し、その際は必ず通知する。
  • Entity はまずは必要ないので後回し。(JPAか、、)
  • Web
    • Spring MVC Layerはオプション機能。
    • GWTかあ。
    • controllerクラスからはなるべく@RooEntityのメソッドをなるべく直接たたけ、と。
  • サービス層
    • つくりたい場合は新しいクラスをつくって、@Servicesアノテーションつければおけ。
    • パッケージ下におけば、Spring Frameworkはアプリ起動時に自動的にクラスを検知する
  • 実践
    • Rooが自動生成したファイルを編集してはいけない。
    • なにかするまえに、Rooがsetupコマンドを提供していないか確認しろ。もしあればそれを使え
    • ファイルを作成、変更、削除する場合は、Rooのシェルを実行しておく
    • Javaのコードは自分でかかなければいけない。Rooは助けてくれるだけで、要求を自動的にプログラムに置き換えてくれるわけではないので、過度な期待はもつな
    • Known Issues / Roo Resourcesを確かめろ。

なるほど。。最終的には、普通のSpringベースのウェブアプリケーションを作り上げてくれるツール、なのですね。
面倒な、XML系の設定やらマッピングやらはすべて引き受けてくれる。が、出来上がりのものに入りこんだりするものじゃないと。
javaファイルとweb層のものは手でいじっても、アプリケーションが壊れてしまうことはなさそう。

そこで、わからないこと。それは、Spring MVC。Serviceらへん。次はSpring MVCを勉強します。