java - 在 Play 中使用 Guice : Injection possible for static fields only

标签 java spring playframework guice playframework-1.x

我是 Play 的忠实粉丝,现在我几乎在所有项目中都使用它。不过,随着我的一个项目变得越来越大,我决定加入 DI 解决方案。在对 Spring 和 Guice 进行短暂考虑后,我停止使用 Guice 并添加了 Play 的 Guice 模块 ( http://www.playframework.com/modules/guice-1.0/home )。

问题似乎在于注入(inject)仅适用于静态字段。这意味着我必须做这样的事情:

@InjectSupport
public class MyService {

    @Inject
    static MyBean myBean;

}

来自 ( http://java.dzone.com/articles/dependency-injection-play )

这让我有点害怕,尤其是在测试方面。我的意思是,确实大多数 DI 解决方案总是尝试注入(inject)单例,例如 Spring 创建每个 bean 的单个实例并注入(inject)它,这在最后有点相同,但仍然如此。我应该有这些担忧吗?

最佳答案

您绝对可以使用 Play 执行 Guice 注入(inject)。

  • 您不应该使用旧的 Guice 模块(版本 1.0)。您提到的教程也使用旧的 Guice 和旧的 Play(版本 1.2!)

    请查看新的 Guice 模块(版本 3.0)和 Play(版本 2.1.1)

    http://www.playframework.com/documentation/2.1.1/JavaInjection

  • 注入(inject)实例变量时,需要动态创建 Controller

    在您的路线文件中:

    GET     /                  @controllers.Application.index()
    

    在 Global.java 中,您需要重写 getControllerInstance:

    @Override
    public <A> A getControllerInstance(Class<A> controllerClass) throws Exception {
        return INJECTOR.getInstance(controllerClass);
    }
    

关于java - 在 Play 中使用 Guice : Injection possible for static fields only,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16814971/

相关文章:

java - 使用 lucene 创建和查询 n-gram 索引

java.lang.OutOfMemoryError GCOverhead Limit Exceeded 错误

scala - 在play scala中传递请求参数

java - JAVA用户认证和登录系统

Java算术除法

java - 关于 MapStruct 映射的多个问题

java - 模型未保存在 Play Framework 中

twitter - 如何配置http ://localhost:9000 to http:/mylocal. loc

java - 使用 JSP 和 Spring 更新嵌套字段

java - Primefaces 日历 - 未显示正确的日期