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, ...);
これを実現するためには、以下の課題を解決する必要がありそうです。
- アノテーションを読み取る。
- InterTypeを使って、JavaBeansのクラスを動的に生成する
- クラスの生成をどのタイミングでやる??(メソッド呼び出しのたびにやるのではパフォーマンスが悪い)
アノテーションやAOPは使う側では触れていたけれど、作る側の知識は持ち合わせていないのでこれから勉強しなければ。
「JavaBeansのクラスを動的に生成する」は、フィールドが定義されているクラスにgetter/setterを追加する PropertyInterType というのがseasarには用意されているようですが、フィールドも何も用意されていないところに追加する、もしくはクラス丸ごと作成する、みたいなことを javaasistでやればよいのかな。。
「クラスの生成をどのタイミングでやる??」は、s2valiのコンポーネント生成時にアノテーションを読み取って、必要なBeanクラスを生成してコンポーネント登録する、みたいな感じか。
しかし、何をトリガーにすればよいのか。。
なかなか高いハードルですが、いい機会なので少しずつやってみようと思います。