You are viewing the documentation for the 2.2.0 release in the 2.2.x series of releases. The latest stable release series is 2.4.x.
デフォルトでは Play は URL をコントローラメソッドに_静的に_バインドします — つまり、コントローラインスタンスはフレームワークによって生成され、適切なスタティックメソッドが指定の URL に従って呼び出されます。しかし場合によってはコントローラの作成を管理したくなるでしょう。そしてその時に新しいルーティングの構文が便利になります。
@
から始まるルーティング定義は play.GlobalSettings#getControllerInstance
メソッドで管理され、以下のようなルーティング定義が与えられた場合、
GET / @controllers.Application.index()
Play は play.GlobalSettings#getControllerInstance
を呼び出し controllers.Application
のインスタンスを提供します(デフォルトでは controllers.Application
のデフォルトコンストラクタを呼び出します)。従って、もしあなたがコントローラクラスの生成を DI フレームワークもしくは手動で管理したい場合、アプリケーションの Global
クラスの getControllerInstance
をオーバーライドする事で実現できます。
Guice を使った例です:
import play.GlobalSettings;
import com.google.inject.Guice;
import com.google.inject.Injector;
public class Global extends GlobalSettings {
private static final Injector INJECTOR = createInjector();
@Override
public <A> A getControllerInstance(Class<A> controllerClass) throws Exception {
return INJECTOR.getInstance(controllerClass);
}
private static Injector createInjector() {
return Guice.createInjector();
}
}
Spring を使った別の例です:
https://github.com/guillaumebort/play20-spring-demo