Seasar4 on Java5

あまり知られていないかもしれませんが,backport175 アノテーションTiger アノテーションとバイナリ互換です.
これがどんな意味を持つかというと,backport175 のアノテーションを読み取るクラス AnnotationsTiger アノテーションも読み取れるということです (その逆も可だけど Java5 のフル機能使うと J2SE1.4 では動かないのであまり意味なし).
ということは...
Seasar4 は Tiger アノテーションを読み取れるということです.
さっそくお試ししてみましょう.


Eclipse 3.1 で新しい Java プロジェクトを作り,Seasar4 の配布ファイルに含まれているライブラリ (s2-frameworks2-extension を含む) をビルドパスに設定します.
そして org.seasar.framework.container パッケージを作成して Seasar4 のアノテーションTiger アノテーションで作成します.

package org.seasar.framework.container;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Component {
    String name();
    String instance() default("singleton");
    String autoBinding() default("auto");
}
package org.seasar.framework.container;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Inject {
    String value();
}
package org.seasar.framework.container;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface NoInject {
}

次に Seasar4 の test.org.seasar.framework.container.auto 以下のファイルをざっくりとコピーします.
そして backport175 アノテーションを使っている 2 つのクラスを Tiger アノテーションに変更します.

package test.org.seasar.framework.container.auto;

import org.seasar.framework.container.Component;
import org.seasar.framework.container.Inject;

/**
 * @author higa
 * 
 */
@Component(name = "foo", instance = "prototype", autoBinding = "constructor")
public class Foo implements Greeting {

    private Foo2 foo2;

    public Foo2 getFoo2() {
        return foo2;
    }

    /**
     * @param foo2
     */
    @Inject("foo2")
    public void setFoo2(Foo2 foo2) {
        this.foo2 = foo2;
    }

    public String greet() {
        return null;
    }
}
package test.org.seasar.framework.container.auto;

import org.seasar.framework.container.Component;

/**
 * @author higa
 */
@Component(name = "foo2")
public class Foo2 {

}

あと,Seasar4 の src フォルダにある aop.dicon をこっちのソースフォルダにコピー.
これで準備完了.
FileSystemComponrntAutoRegisterTest を実行!!!!
...
\(^o^)/


ところで,Eclipse 3.1 のアノテーション補完ってうまく動いてます?
なんか,@Com って入れてから Ctrl+Space しても com パッケージが出てきたりして全然アノテーションを補完してくれないんですけど.
なんか勘違いしてる?