2013-05-16 94 views
0

我有一個類用@Inject標識字段。我用morphia將這個對象持久化到MongoDB。到時候來獲取對象回來,我執行查詢,像這樣:Guice不注入嗎啡返回對象

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

據我瞭解,嗎啡將使用無參數的構造函數來創建對象的實例,然後使用反射來填充字段值。

Guice應該@Inject的值爲null。我知道Guice也使用反射,但在這種情況下,guice不會創建對象。 Morphia創建該對象。

我想我可以嘗試讓注射器在我的DAO,做這樣的事情:

injector.injectMembers(versionedPerson) 

然而,得到了噴油器似乎有點過。有沒有其他的方式讓morhpia和Guice在這種情況下互動?我怎樣才能得到guice @將必要的元素注入morhpia創建的對象?

回答

0

在這種情況下,除了使用噴油器外沒有別的辦法。因此,直接使用它不應該感到不自然。

您可以使用DAO中的#injectMembers,但正如您所指出的那樣,感覺有點偏離。它是。也是這樣Guice AOP將不起作用。爲了讓AOP工作,Guice需要成爲對象的創建者。

我會做的是將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); 

線的東西如果你會寫這個擴展自己,你直接用注射器。

OT:Do you really need the DAO? Food for thought.