2010年1月14日木曜日

Spring 3.0/JSR-330/JavaConfig

Spring 3.0 の JSR-330 と JavaConfig をちょっとだけ試してみた。

====

以下のような2クラスを考える。
  ┌───────┐                ┌─────┐
  │   Greeter    │ 《dependency》 │ Greeting │
  │==============│--------------->│==========│
  │greet(person) │                │getWord() │
  └───────┘                └─────┘
ここで
  • Greeting.getWord() メソッドは、挨拶の言葉を返す。
  • Greeter.greet() メソッドは、Greeting.getWord() で取得した挨拶の言葉に、引数 person を連結して返す。
これを Spring 3.0 で書いてみる。 Greeter と Greeting を Spring 管理下に置くための設定は、従来、XML ファイルで書いていたが、GUICE みたいに Java で書けるようになった。
@Configuration
public class AppConfig {
   @Bean public Greeter greeter() {
      return new Greeter();
   }
   @Bean public Greeting greeting() {
      return new Greeting();
   }
}
Greeter は以下のようになる。Greeting への依存は @Inject で表現する。
public class Greeter {
   @Inject
   private Greeting greeting;
   public String greet(String person) {
      return String.format("%s, %s!", greeting.getWord(), person);
   }
}
Greeting は、まあ適当
public class Greeting {
   public String getWord() { return "Hello"; }
}
こんなコードで実行すると、
public class App {
   public static void main(String[] args) {
      ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);
      Greeter bean = ctx.getBean(Greeter.class);

      System.out.println(bean.greet("Spring3.0"));
   }
}
以下のような出力を得る
Hello, Spring3.0!
■ Eclipse で動かすには
  • Spring3.0 の dist 下の jar 群をローカル Maven リポジトリに登録する.[参考]
  • javax.inject も リポジトリに登録。[download]
    mvn install:install-file \
    -DgroupId=javax.inject \
    -DartifactId=com.springsource.javax.inject -Dversion=1.0.0 \
    -Dsources=com.springsource.javax.inject-sources-1.0.0.jar \
    -Dfile=com.springsource.javax.inject-1.0.0.jar \
    -Dpackaging=jar -DgeneratePom=true
  • Eclipse で Maven Project を作成する
  • pom に以下の依存を指定
    groupIdorg.springframework
    artifactIdspring-context
    version3.0.0.RELEASE
    groupIdcglib
    artifactIdcglib
    version2.2
    groupIdjavax.inject
    artifactIdcom.springsource.javax.inject
    version1.0.0

0 件のコメント:

コメントを投稿