【发布时间】:2016-12-01 16:14:00
【问题描述】:
我们在一个项目中使用 Groovy 和 Guice,我遇到了以下错误:
groovy.lang.MissingPropertyException:没有这样的属性:myService 类:com.me.api.services.SomeService$$EnhancerByGuice$$536bdaec
花了一点时间才弄明白,但这是因为我引用了一个私有类成员,该成员是在闭包内注入的。谁能解释为什么会发生这种情况?
另外,有没有更好的方法呢?
这是该类的外观的 sn-p:
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
}
我要么必须使用标准 for 循环,要么不使用注入的成员,这往往会导致代码重复。
【问题讨论】:
-
与 Guice 无关。该字段是
private,因此 Groovy 不会为其生成访问器。 -
在普通的 Groovy 中,私有类字段可以从闭包中访问。但是,请记住,私有字段被注入到 class 实例中,而不是闭包中。闭包的解决/委托策略开始发挥作用,需要在闭包中查找某些内容。尝试发布一个更彻底地展示您的问题的示例。