JavaBeansをAOPで作成したい

s2valiを実践投入して試している中で1つ新しいニーズが出てきました。
commons-validator の validateメソッドには JavaBeansを渡すのですが、s2valiのメソッドとしては以下のようにチェックしたい値をパラメータに渡す形もサポートしたい。

  // JavaBeansを渡してValidate
  public String[] validateHoge(HogeDto dto);

  // パラメータ渡しでValidate 
  @ValidationParam({"name", "age", ...})
  public String[] validateHoge(String field1, int field2, ...);

これを実現するためには、以下の課題を解決する必要がありそうです。

  1. アノテーションを読み取る。
  2. InterTypeを使って、JavaBeansのクラスを動的に生成する
  3. クラスの生成をどのタイミングでやる??(メソッド呼び出しのたびにやるのではパフォーマンスが悪い)

アノテーションAOPは使う側では触れていたけれど、作る側の知識は持ち合わせていないのでこれから勉強しなければ。

「JavaBeansのクラスを動的に生成する」は、フィールドが定義されているクラスにgetter/setterを追加する PropertyInterType というのがseasarには用意されているようですが、フィールドも何も用意されていないところに追加する、もしくはクラス丸ごと作成する、みたいなことを javaasistでやればよいのかな。。

「クラスの生成をどのタイミングでやる??」は、s2valiのコンポーネント生成時にアノテーションを読み取って、必要なBeanクラスを生成してコンポーネント登録する、みたいな感じか。
しかし、何をトリガーにすればよいのか。。

なかなか高いハードルですが、いい機会なので少しずつやってみようと思います。