Android+Guice その6

※2012・10 こちらのページにまとめるようにしてみました。

注入するObjectの作成が簡単ではない場合、Injectionだけで全部Objectを作ろうとするとちょっと大変です。

こういう場合に使える@Providesメソッドの使い方です。

Moduleクラスはオブジェクトの作り方を示すわけですが、configure()内でbindする以外に、注入するオブジェクトをMethodで作って渡す事が出来ます。

見れば分かると思いますが、この場合bindは必要ありません。bindするとエラーになります。

InjectorはServiceの実装を供給するためにはMethodを呼び出せば良い事だけ知っていれば事たりるからです。

二点ほど注意ですが、Scopeの設定やSingletonの実装をする責任はProvides Method側にあります。

ServiceImplのclass定義に@Singletonアノテーションを追加してもSingletonにはなりません。

代わりに@Provides Method側に@Singletonを追加する事でSingletonになります。

もう一点はProvider内から例外を投げるのは許可されていないとのこと。この場合@CheckedProvidesを使うべきとのこと。これについては別の機会に書こうかなと。

他にもAnnotated BindingsとかConstructor Bindingsとかありますが、個人的にあまり使用しない(Constructor BindingsはAOPを利用しない場合、普通にProvides Methodで十分対処可能)ここら辺はとりあえず放置して、

次回からはAndroidのアプリケーションでの使用をテストしてみたいと思います。