Seasar4 on Java5
あまり知られていないかもしれませんが,backport175 アノテーションは Tiger アノテーションとバイナリ互換です.
これがどんな意味を持つかというと,backport175 のアノテーションを読み取るクラス Annotations
は Tiger アノテーションも読み取れるということです (その逆も可だけど Java5 のフル機能使うと J2SE1.4 では動かないのであまり意味なし).
ということは...
Seasar4 は Tiger アノテーションを読み取れるということです.
さっそくお試ししてみましょう.
Eclipse 3.1 で新しい Java プロジェクトを作り,Seasar4 の配布ファイルに含まれているライブラリ (s2-framework
&s2-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
パッケージが出てきたりして全然アノテーションを補完してくれないんですけど.
なんか勘違いしてる?