Documentation

You are viewing the documentation for the 2.1.5 release in the 2.1.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