遅延バインディング
参考
概要
遅延バインディングのメリットとしては上の参考リンクにいろいろと記述があるが、概念としては、ブラウザのランタイム環境によって注入されるオブジェクトを変更するというDIの一種である、と解釈するのが簡単。
Javaコード例
以下のような例を考えてみる。
package foo.bar; public class BrowserType { public String getText() { return "unknown"; } }
package foo.bar; public class BrowserTypeChrome extends BrowserType { public String getText() { return "for chrome"; } }
package foo.bar; public class BrowserTypeFirefox extends BrowserType { public String getText() { return "for firefox"; } }
意図としては、ブラウザがchromeであれば、BrowserTypeChrome,FirefoxであればBrowserTypeFirefoxのオブジェクトを取得したい。 コード自体には以下のように記述しておく。
BrowserType browserType = GWT.create(BrowserType.class);
こうしておいて、ブラウザの種類によって所望のオブジェクトがbrowserTypeに格納されるようにしたい、というわけ。
※ちなみに、通常のDIと同様にBrowserTypeはインターフェースでもよいが、ブラウザタイプ不明の場合のデフォルトを用意した方がよいかと思われる。そうしないと当然のことながら実行時エラーになる。
モジュール定義例
モジュール定義には以下のように、どのブラウザの場合にどのクラスを選択するかを記述する必要がある。
<replace-with class="foo.bar.BrowserTypeFirefox"> <when-type-is class="foo.bar.BrowserType" /> <any> <when-property-is name="user.agent" value="gecko1_8" /> </any> </replace-with> <replace-with class="foo.bar.BrowserTypeChrome"> <when-type-is class="foo.bar.BrowserType" /> <any> <when-property-is name="user.agent" value="safari" /> </any> </replace-with>
ちなみに、Chromeの選択はsafariと記述しなければならないようである。可能な値は以下に記述がある。