java - Injector.getInstance() 是否总是调用构造函数?

标签 java playframework guice

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

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

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

我在 Play Framework 的 Bootstrap 类中运行,试图在 having some problems with Play's Guice Module 之后连接 Guice 来使用它.

编辑 - 我刚刚发现我在构造函数上缺少一个@Inject(它有参数,并且@Inject 对此类构造函数是强制性的)。但问题仍然有效——这里到底发生了什么? Guice 是在没有运行构造函数的情况下创建了对象,还是在 Play 中创建了对象?

最佳答案

不,一点也不。作用域(例如单例)的存在是为了控制何时创建(和不创建)新对象。此外,某些东西可能绑定(bind)到对象的现有实例。例如,如果 Foo 是一个 enumgetInstance 肯定不会调用构造函数。

至于那里到底发生了什么,我不能说。对于正常绑定(bind)的内容(例如,不绑定(bind)到提供者或现有实例),Guice应该只创建一个对象,如果它有一个 @Inject 注释构造函数或只有一个,无参数构造函数。

关于java - Injector.getInstance() 是否总是调用构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8435686/

相关文章:

java - 访问在 Guice 的根对象图中不可配置的 Map<String, Interface-Impl>

java - Guice:注入(inject)模块然后安装它

java - 错误 SQL 错误 : 1452, SQLState : 23000, 使用 hibernate 和 javafx

javascript - 从 scala for 循环创建的表中读取 <td> 标签值

scala - 我需要创建不同的表单实例吗

java - 使用 Ebean NullPointerException 玩 2.4

java - 使用 URL 排除模式/使用 Guice 在开发模式下运行 App Engine

java - "MainActivity.this is not enclosing class"错误实际上是什么?

java - 仅从 jar 文件运行时,新 org.json.JSONObject(String) 无限期阻塞

java - 当我尝试将 gridview 放入 fragment 中时,适配器中的 getView() 出现错误