Injector.getInstance()总是调用构造函数吗?

时间:2011-12-08 18:20:22

标签: java playframework guice

我正在调试Guice不会调用构造函数的情况。 它成功执行Foo foo = injector.getInstance(Foo.class)Foo是一个具体的类),调试器显示foo在此语句后不为空......但是没有调用构造函数。

所有foo的字段都为null,并且我没有调用在磁盘上创建文件的构造函数中放置的语句。

没有其他构造函数,Foo不是单例 - 只是正常绑定。应用程序启动时会发生这种情况。 Foo的构造函数从不运行 - 我提到它试图在构造函数中创建的文件永远不会被创建,这意味着构造函数代码永远不会运行。

我在Play Framework的bootstrap类中运行,尝试在having some problems with Play's Guice Module之后连接Guice以使用它。

编辑 - 我刚刚发现我在构造函数上缺少@Inject(它有参数,并且@Inject在这样的构造函数上是必需的)。但问题仍然有效 - 这里究竟发生了什么? Guice是否在不运行构造函数的情况下创建了对象,还是Play?

1 个答案:

答案 0 :(得分:1)

不,一点也不。存在用于控制何时(而非)创建新对象的范围,例如单例。此外,某些东西可能绑定到对象的现有实例。例如,如果Fooenum,则getInstance肯定不会调用构造函数。

至于那里发生的事情,我不能说。对于通常绑定的东西(例如,不是提供者或现有实例),Guice只应创建一个对象,如果它有一个@Inject带注释的构造函数或者只有一个没有arg的构造函数