2012年7月20日金曜日

Play framework 2.0.2 (Java) Guiceプラグインを利用する

Play 2.0 for Javaで、Guiceプラグインを利用するため試行錯誤したので備忘録として記録。 project/Build.scalaに依存関係を登録。
    val appDependencies = Seq(
      // Add your project dependencies here,
      "com.typesafe" % "play-plugins-guice" % "2.0.3"
    )
ターミナルから依存関係の取得を実行。
$ play dependencies
Eclipseで編集するので、Eclipse用の設定を更新。
$ play eclipsify
ここまでで環境構築は完了。 ここから、環境設定。 conf/直下にplay.pluginsファイルを作成して、GuicePluginを利用することを宣言する。
ここハマッタ。pluginを利用する場合は準備する必要アリ。
# conf/play.plugins
1500:com.typesafe.plugin.inject.GuicePlugin
依存関係をバインドするinitializerを作成。
app/module/Dependencies.javaを作成。
はまったのがここで、パッケージ名とクラス名が決められているので注意
かっこつけてmodules.Dependencies.javaなんてつくったら動かなかった。
DI対象は好きな場所に好きな名前で準備。
package module;

import services.UserSearchService;
import services.impl.UserSearchServiceImpl;

import com.google.inject.Binder;
import com.google.inject.Module;

public class Dependencies implements Module {

    public void configure(final Binder binde) {
        binde.bind(UserSearchService.class).to(UserSearchServiceImpl.class);
    }
}
後はDI先でDIフィールドの宣言を行う。
ここも注意点アリ。
@javax.inject.Injectである必要アリ。
package controllers;

import static play.Logger.debug;

import javax.inject.Inject;

import org.codehaus.jackson.node.ObjectNode;

import play.data.Form;
import play.libs.Json;
import play.mvc.Controller;
import play.mvc.Result;
import services.UserSearchService;
import forms.UserSearch;

public class UserController extends Controller {

    @Inject
    static UserSearchService userSearchService;
}
これで動くはず。