Java Play框架依赖注入
我一直在Google上寻找关于如何在PlayFramework2.1中使用Guice/SpringDI的有用信息 我想做的是在一些DAO中注入几个服务,反之亦然 需要澄清的是,在play 2.1中,您是否必须在DI的routes文件中使用@annotation 我已经看过这本指南了- 并应用以下步骤在app中创建一个全局类,并在Build.scala中添加GUICE依赖项,但在调用注入的对象时,会继续得到一个空指针异常Java Play框架依赖注入,java,dependency-injection,playframework,guice,playframework-2.1,Java,Dependency Injection,Playframework,Guice,Playframework 2.1,我一直在Google上寻找关于如何在PlayFramework2.1中使用Guice/SpringDI的有用信息 我想做的是在一些DAO中注入几个服务,反之亦然 需要澄清的是,在play 2.1中,您是否必须在DI的routes文件中使用@annotation 我已经看过这本指南了- 并应用以下步骤在app中创建一个全局类,并在Build.scala中添加GUICE依赖项,但在调用注入的对象时,会继续得到一个空指针异常 有没有人能够使用Guice让DI在Play2.1中工作?我在互联网上看到过一
有没有人能够使用Guice让DI在Play2.1中工作?我在互联网上看到过一些例子,但它们似乎都在控制器中使用DI 您是否尝试过使用与Guice不同的DI方法? 我们还尝试用Guice或Spring实现一个项目,但最终在实现trait的对象中注册了依赖项,例如:
trait Registry {
def userDao: UserDao
...
}
object Registry {
var current: Registry = _
}
object Environnment {
object Dev extends Registry {
val userDao = ...
//implement your environment for develpment here
}
object Test extends Registry {
val userDao = ...
//implement your ennviroment for tests here e.g. with mock objects
}
}
另一个可能适合您的好方法是cake模式(只需谷歌搜索即可)。我使用cake模式和我自己版本的全局覆盖
getControllerInstance
干杯
Ben对不起,这是一个迟到的回复,但这是我们的示例
我注意到您正在使用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());
}
}
MyInterface:
package models;
public interface MyInterface {
String foo();
}
我的实施2项目:
package models;
public class MyImplementation2Inject implements MyInterface {
public String foo() {
return "Hi mom!";
}
}
MyComponent模块:
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);
}
}
最后一部分,花了我很长时间才弄明白,就是注册模块。您可以通过在conf
目录下的application.conf
文件末尾添加以下行来完成此操作:
play.modules.enabled += "modules.MyComponentModule"
我希望这对你有帮助。:) 不,那是错的。这样的循环依赖关系是一种糟糕的设计。服务可以有DAO并与其他服务协作,但DAO不应该有服务。正确,这很有意义。为什么要同时使用Play和Guice?Play没有内置DI吗?这个怎么样?我还没有Guice示例,但这里有一个Spring示例,它注入了控制器、DAO等: