tapestry-s2-integration
Web系から離れてしまって最近の情報に疎くなってしまった。
というわけで色々調査がてらTapestry5とS2を統合してみました。どうすればいいのかなとか考えてたらいつの間にかT5のリポジトリにtapestry-spring-integrationとかできてるし。だから単純にパクっただけ。すごい簡単にできた。
ModuleクラスのSubModuleに指定して使います。
@Id("app") @SubModule(S2Module.class) public class AppModule { }
ページ側はこんな感じです。Greetingという型でバインディングしてます。
public class Start { @Inject("s2:") private Greeting greeting; public String getGreeting() { return greeting.greet(); } }
コンポーネント名でバインディングしたいときは、@Inject("s2:コンポーネント名")とします。
ハッキリ言ってちゃんと動くかわかりませんwT5を全然理解してないし何かしらのアプリすら作ったことないですからね。ホットデプロイとかは当然未確認ですよ。つまりその程度です。
Eclipseプラグイン開発 徹底攻略 Eclipse 3.2対応
これは買うしかない。amazonはまだか。
ドラマ カクレカラクリ
(ry
アノテーション対応
定数アノテーションの、しかもBINDINGアノテーションだけですが対応してみました。自動バインディング対象のコンポーネントがない場合のエラーや警告は次のようにしています。
- bindingType=must
- エラー
- bindingType=should
- 警告
- bindingType=may
- 何も出さない
- bindingType=none
- 何も出さない
- 自動バインディング対象外
- プロパティ名が指定されているとき
- エラー
- 不正なbindingType
- エラー
AutoRegisterで出ていたnullがセットされますという警告が、これで表示されなくなるはずです。
実装方法は悩んだのですが、IRttiPropertyDescriptor#getAdaptorを使ってアノテーションを取得できるようにしました。たとえば
IRtti rtti = (IRtti) component.getAdaptor(IRtti.class); IRttiPropertyDescriptor propDesc = rtti.getProperty("hoge"); IBindingAnnotation ba = (IBindingAnnotation) propDesc.getAdaptor(IBindingAnnotation.class);
という感じです。見たところRTTIとdiconモデルは分離されているようなので、diconモデルからRTTIを取得しようとしたときだけアノテーションをサポートしたRTTIでラップするという形にしました。