我們是在一個項目中使用Groovy和Guice和我碰到下面的錯誤來了:爲什麼Groovy閉包不能訪問注入的類成員?
groovy.lang.MissingPropertyException: No such property: myService for class: com.me.api.services.SomeService$$EnhancerByGuice$$536bdaec
花了一點要弄清楚,但它是因爲我引用一個私有類成員,這是注射,內關閉。任何人都可以解釋爲什麼會發生這種情況?
此外,有沒有更好的方法來做到這一點?
這裏是什麼樣的類看起來像一個片段:
import javax.inject.Inject
import javax.inject.Singleton
@Singleton
class MyService extends BaseService<Thing> {
@Inject
private ThingDao thingDao
@Inject
private OtherService<Thing> otherService
@Override
List<Thing> findAll() {
List<Thing> things = this.dao.findAll()
things.each {
//Note: This doesn't work!
otherService.doSomething()
}
things
}
我要麼必須使用標準的循環或不使用注射的成員,然後往往會導致代碼重複。
與Guice沒有任何關係。該字段是「private」,因此Groovy不會爲其生成訪問者。 –
在普通的Groovy中,私有類字段可以從閉包訪問。但是,請記住私人字段正在注入* class *實例,而不是關閉。關閉的解決/委派策略開始發揮作用,需要在閉包中查找。試着張貼一個更徹底地展示你的問題的例子。 –