1

我有一个用@Inject 标识字段的类。我使用 morphia 将这个对象保存到 MongoDB。当需要取回对象时,我执行一个查询,如下所示:

MorphiaVersionedPerson versionedPerson =  ds.find(entityClazz).filter("published.name", name).get();

据我了解,Morphia 将使用无参数构造函数来创建该对象的实例,然后使用反射来填充字段值。

Guice 应该 @Inject 的值是 null。我知道 Guice 也使用反射,但在这种情况下,guice 不会创建对象。Morphia 创建对象。

我想我可以尝试在我的 DAO 中获取注射器并执行以下操作:

injector.injectMembers(versionedPerson )

然而,让注射器似乎有点过时了。在这种情况下,还有其他方法可以让 morhpia 和 Guice 互动吗?如何获得将必要元素 @Inject 到 morhpia 创建的对象的指导?

4

1 回答 1

1

在这种情况下,除了使用注射器之外别无他法。所以直接使用应该不会觉得不自然。

您可以在 DAO 中使用#injectMembers,但正如您所指出的那样感觉有点不对劲。它是。同样这样Guice AOP 将无法工作。Guice 需要成为对象的创建者才能使 AOP 工作。

我要做的是将 Guice 集成到 Morphia 中。没有使用过 Morphia,但快速浏览后发现 Morphia 即将推出 Guice 扩展。

https://github.com/jmkgreen/morphia/blob/master/guice-plug/src/main/java/com/github/jmkgreen/morphia/ext/guice/GuiceExtension.java

在引导代码中,我会按照以下方式做一些事情

Morphia m = injector.getInstance(Morphia.class);
new GuiceExtension(m, injector);

如果您自己编写此扩展程序,您可以直接使用 Injector。

OT:你真的需要 DAO 吗?深思熟虑。

于 2013-05-17T10:18:11.573 回答