Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Play框架依赖注入_Java_Dependency Injection_Playframework_Guice_Playframework 2.1 - Fatal编程技术网

Java Play框架依赖注入

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中工作?我在互联网上看到过一

我一直在Google上寻找关于如何在PlayFramework2.1中使用Guice/SpringDI的有用信息

我想做的是在一些DAO中注入几个服务,反之亦然

需要澄清的是,在play 2.1中,您是否必须在DI的routes文件中使用@annotation

我已经看过这本指南了-

并应用以下步骤在app中创建一个全局类,并在Build.scala中添加GUICE依赖项,但在调用注入的对象时,会继续得到一个空指针异常


有没有人能够使用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等: