2012-10-29 19 views
3

如何將依賴關係注入到不是由DI框架創建的對象中?我可以將依賴關係注入到不是由DI框架創建的對象中嗎

我使用Objectify在Google App Engine上運行應用程序,因此POJO是由Objectify在從數據存儲中獲取數據時創建的。就我個人而言,我喜歡使用便捷方法來獲取相關對象,如car.getOwner()。getName()汽車對象由Objectify創建。 getOwner()所有者的代碼會是這樣的

public Person getOwner(){ 
    return PersonService.getById(this.ownerId); 
} 

我可以用一個服務定位

public Person getOwner(){ 
    return ServiceLocator.getService(PersonService.class).getById(this.ownerId); 
} 

改善,但我會怎麼做這與DI?

我看着Guice,但我只能想到將注入器放在單例中並從getOwner方法訪問它。

我的思想是否有缺陷?

+4

不能直接回答,但有隱藏無辜的前瞻性干將背後的數據存儲操作將在你遲早會適得其反。客戶端代碼希望能夠以任何速率調用getter,而不存在性能問題。例如,在一個GUI視圖中,一個重繪偵聽器可能會在組件周圍移動時每秒調用它幾十次。還有很多其他場景。 –

+0

我正在編寫一個Web應用程序,並有幾個級別的緩存。這種方法使從模板中延遲加載數據變得非常簡單。這就是我喜歡它的原因。多年來,我一直與這樣的方法合作。不過,測試它們是一件痛苦的事情。這就是我問這個問題的原因。 –

+0

@MarkoTopolnik這是大多數ORM的工作原理。 Hibernate完全一樣(甚至更無辜 - 因爲實現實際上是在代理中)。 –

回答

0

我能想到的唯一的解決辦法是加載時間編織,I quote

的情況下:加載時,韋弗AspectJ的加載時織寄存器 當前的類加載器。所以,不僅Spring beans將被定位, ,但是類加載器中加載的任何類都與定義的 切入點相匹配。

但我認爲這將與GAE限制相沖突,但我還沒有在GAE中嘗試過。

相關問題