unl*_*hed 3 java dependency-injection guice playframework playframework-2.1
我一直在寻找一些有关如何在Play Framework 2.1中使用Guice/Spring DI的有用信息
我想要做的是在一些DAO中注入几个服务,反之亦然.
只需要对此进行一些澄清 - 使用play 2.1,你是否必须在路径文件中使用@ annotation进行DI?
我在这里查看了这个指南 - https://github.com/playframework/Play20/blob/master/documentation/manual/javaGuide/main/inject/JavaInjection.md
并应用以下步骤在app中创建Global类并在Build.scala中添加GUICE依赖项,但在调用注入的对象时继续获取空指针异常.
有没有人能够使用Guice在Play 2.1中使用DI?我在互联网上看到了一些例子,但他们似乎都在控制器中使用DI.
我注意到你正在使用Java.以下是我如何使用它来注入控制器.
首先,我创建了以下4个类:
myController的:
package controllers;
import play.mvc.*;
import javax.inject.Inject;
public class MyController extends Controller {
@Inject
private MyInterface myInterface;
public Result someActionMethodThatUsesMyInterface(){
return ok(myInterface.foo());
}
}
Run Code Online (Sandbox Code Playgroud)
MyInterface的:
package models;
public interface MyInterface {
String foo();
}
Run Code Online (Sandbox Code Playgroud)
MyImplementation2Inject:
package models;
public class MyImplementation2Inject implements MyInterface {
public String foo() {
return "Hi mom!";
}
}
Run Code Online (Sandbox Code Playgroud)
MyComponentModule:
package modules;
import com.google.inject.AbstractModule;
import models.MyInterface;
import models.MyImplementation2Inject;
public class ComponentModule extends AbstractModule {
@Override
protected void configure() {
bind(MyInterface.class).
to(MyImplementation2Inject.class);
}
}
Run Code Online (Sandbox Code Playgroud)
现在最后一部分,我花了很长时间才弄清楚,是注册模块.您可以通过在application.conf文件末尾添加以下行来实现此目的,该文件位于conf目录中:
play.modules.enabled += "modules.MyComponentModule"
Run Code Online (Sandbox Code Playgroud)
我希望这对你有所帮助.:)