我是 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/