⛄️

JSR 330を実装してみた

2013/06/02に公開

JSR 330はDIの仕様です。 参照実装はGuiceです。

http://jcp.org/en/jsr/detail?id=330

仕様は薄いしTCKもあるので実装してみました。

https://github.com/backpaper0/radishtainer

まあ何とかTCK通しただけですががが。

JSR 330の仕様では@Injectで注釈しているメソッドがインジェクション対象となりますが、サブクラスでオーバーライドされており、オーバーライドされたそのメソッドが@Injectで注釈されていなければインジェクション対象とはなりません。

で、メソッドがスーパークラスのメソッドをオーバーライドしているのかどうかはリフレクションで取得できるだろー、と思ってたけどできませんでした。

んで、スーパークラスに同じシグネチャのメソッドがあればオーバーライドしていると判断してええじゃろ、と思ってたけどそんな簡単なアレじゃありませんでした。
メソッド名と引数の数・型が同じでも例えば可視性がpackage privateでスーパークラスとサブクラスが異なるパッケージであればオーバーライドしていません。
パッケージが一緒でもスーパークラスの方で定義されたメソッドがprivateだとやっぱりオーバーライドしていません。

というわけでオーバーライドしてるかどうかの判定が面倒で泥臭くなっています。
もっと良い方法があれば教えてください、的な。

Discussion