interfaceをConfigurationとして利用する(1) 動的な言語ならMethod Missingな処理でやるところ

メソッドシグネチャ(及びメソッドに付加された属性/アノテーション)だけで、定型的な処理を構築できてしまうパターンってありますよね。
例えば、findByUseridAndPassword(userid, password)なメソッドが呼ばれたら、「SELECT ... WHERE userid = ? AND password = ?」なSQLを発行するとか(・∀・)


これを実現するために、動的な言語ではMethod Missingな処理*1で実際の処理を組み立てたりします。
PHPの我々フレームワークでも、dao周りでこの仕組みを使っていたりしますが(・∀・)


静的な言語の場合、同じ仕組みは採用できないので、発想を変えて。
interfaceだけ用意して、その呼び出しをAOPによりinterceptorで割り込んで、実際の処理を外部に委譲してしまうような方式をとったりします。


自動で処理を組み立てるだけであれば、その為の設定情報はXMLだろうがなんだろうが良いわけですが(・ω・)
interface + interceptorによる委譲方式の利点は、使用側がinterfaceを通じて規定されたシグネチャで処理を呼び出せること。
これは逆に、静的言語の利点を生かした方法ですよね(・∀・)


で、有名どころではS2Daoがこの方式ですが。
あと、iBatis 3.0でもinterfaceを使った設定が出来るようになるみたいですが、同じ方式かな(´∀`)?


っというわけで、この仕組みを自分のアプリケーション(with Spring/CGLIB)にも組み込む方法について。

*1:PHPの__call、Rubyのmethod_missing