-Javassist

ページモデルオブジェクトがJavaインターフェイスの場合のエンハンス機能は、はじめコードジェネレーションでやろうと思っていたのですが、当面のしのぎにJavassistで実装しました。Antをベースにコードジェネレーションするのもベースのコードは書いてましたが中止しました。ぼちぼち計画中のAptライクなコンパイルフェーズの仕組みで行きたいと思うためです。

public interface IndexPage extends PageModel {
  @Property
  String getUserName();
  @Property
  void setErrorMessage(String message);
}

今回は上記のようなものをJavassistにて、フィールド・Setter・Getterのフルセットを補完します。もうちょいアーキテクチャを練れれば、マーカーインターフェイスも無しで、型付けの厳しいものができるかも。。。

@PageModel
public interface IndexPage {
  @Property
  String getUserName();
  @Property
  void setErrorMessage(String message);
}

こうなると、最近の定義ではPOJIベースと言っていいみたいなんで、流行的にもOKかな。これは、もうしばらく実現に時間がかかりそうです。一方で、以下は考えませんでした。

public class IndexModel implements PageModel {
  @Property
  public String userName;
  @Property
  public String errorMessage;
}

インターフェイスではフィールドが書けなかった、というだけなんですけどね。