私たちは、プロジェクトで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では、プライベートクラスのフィールドにはクロージャからアクセスできます。しかし、プライベートフィールドは、クロージャではなく*クラス*インスタンスに注入されていることに注意してください。クロージャの解決/委任戦略は、クロージャ内で何かを探す必要があります。あなたの問題をより完全に実証した例を投稿してみてください。 –