如果我的模块文件中有@Provides批注以返回对象,但我从未将其注入任何地方,是否会在scala中调用默认构造函数?
答案 0 :(得分:1)
根据Google Guice官方文档:https://github.com/google/guice/wiki/ProvidesMethods
@Provides方法当您需要代码来创建对象时,请使用@Provides方法。该方法必须在模块中定义,并且必须具有@Provides批注。该方法的返回类型是绑定类型。每当注入器需要该类型的实例时,它将调用该方法。
因此,构造函数将永远不会被调用。
如果仍然需要构造对象,请使用com.google.inject.Singleton
批注:
import com.google.inject._
class DbModule extends AbstractModule {
@Provides
@Singleton
def helloWorld: HelloWorld = new HelloWorld();
}
class HelloWorld() {
println("Hello world!")
}
将打印:
Hello world!