【发布时间】:2011-12-08 18:20:22
【问题描述】:
我正在调试 Guice 似乎没有调用构造函数的情况。
成功执行Foo foo = injector.getInstance(Foo.class)(Foo是一个具体的类),调试器显示foo在这条语句后不为空......但构造函数没有被调用。
foo 的所有字段都是空的,并且我在构造函数中放入的在磁盘上创建文件的语句没有被调用。
没有其他构造函数,Foo 不是单例 - 只是正常绑定。这发生在应用程序启动时。 Foo 的构造函数完全从不运行 - 我提到它试图在构造函数中创建的文件永远不会创建,这意味着构造函数代码从未运行过。
我在 Play Framework 的引导类中运行,试图在 having some problems with Play's Guice Module 之后连接 Guice 以使用它。
编辑 - 我刚刚发现构造函数上缺少@Inject(它有参数,而@Inject 在此类构造函数上是必需的)。但是这个问题仍然有效——这里到底发生了什么? Guice 是在没有运行构造函数的情况下创建了对象,还是 Play?
【问题讨论】:
-
getInstance()可能返回了一个缓存的(例如先前构建的)实例。 -
@MДΓΓБДLL - 感谢上帝 SO 的自动完成昵称。我编辑了这个问题 - 构造函数从未运行过 - 如果它运行了,它将在磁盘上创建一个文件。模块是空的,并且对象没有被标记为
@Singleton,所以 Guice 本身不应该在这里缓存任何东西。
标签: java playframework guice