gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 07:16:34 28 4
gpt4 key购买 nike

我是 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 - 使用 Guice Play : Injection possible for static fields only,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16814971/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com