我一直在谷歌上寻找一些关于如何在 Play Framework 2.1 中使用 Guice/Spring DI 的有用信息
我想做的是在一些 DAO 中注入(inject)多个服务,反之亦然。
只是需要澄清一下 - 使用 play 2.1,您是否必须在 DI 的路由文件中使用 @ 注释?
我在这里看过这个指南 - https://github.com/playframework/Play20/blob/master/documentation/manual/javaGuide/main/inject/JavaInjection.md
并应用以下步骤在应用程序中创建一个全局类并在 Build.scala 中添加 GUICE 依赖项,但在调用注入(inject)对象时继续出现空指针异常。
有没有人能够使用 Guice 让 DI 在 Play 2.1 中工作?我在 Internet 上看到过示例,但它们似乎都在 Controller 中使用 DI。
最佳答案
我注意到您正在使用 Java。以下是我如何让它注入(inject) Controller 。
首先,我创建了以下 4 个类:
我的 Controller :
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());
}
}
我的界面:
package models;
public interface MyInterface {
String foo();
}
MyImplementation2Inject:
package models;
public class MyImplementation2Inject implements MyInterface {
public String foo() {
return "Hi mom!";
}
}
我的组件模块:
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);
}
}
现在,我花了很长时间才弄明白的最后一部分是注册模块。为此,您可以将以下行添加到 application.conf
文件的末尾,该文件位于 conf
目录中:
play.modules.enabled += "modules.MyComponentModule"
希望对您有所帮助。 :)
关于java - Play Framework 依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15600186/