【发布时间】:2016-04-15 15:33:30
【问题描述】:
我有一个类 (CustomConnectionProvider),它将由第三方库 (hibernate) 使用 class.forName().newInstance() 实例化。我需要注入一个 guice 托管依赖项,例如 MyDatabaseFactory,它将为多租户提供数据源。
我不能直接@Inject MyDatabaseFactory,因为CustomConnectionProvider 不是托管bean。而且我无法控制它是如何创建的。
我刚开始使用 Guice 作为 Play 应用程序的一部分。任何示例或想法将不胜感激,我正在寻找像 ServiceLocator 这样的解决方案。
针对特定情况修复
幸运的是,Play.application() 提供了一个静态方法来获取injector,我正在使用它来获取我的工厂实例。我仍然想知道我是否必须在不玩的情况下修复它。
Play 2.5 更新
Play.application() 在 2.5 中已弃用。我们需要按照罗伯特的建议使用静态注入。
【问题讨论】:
-
嘿,这是hibernate特有的吗?如果是这样,则有:github.com/google/guice/wiki/GuicePersist,这是休眠的 guice 模型。如果您需要手动执行此操作,则应在创建其他所有内容的模块中创建实体管理器(休眠的东西)。这样,您将获得 guice 管理的持久性。我确实有一个关于后者的例子,但是我没有使用 Play
-
@pandaadb,它并不特定于 Hibernate。它专门用于将对象注入到另一个根本没有被 Guice 初始化的类中,并且该类的初始化在某个第三方库中。