Guice Scala DI,了解如何

时间:2019-05-10 09:52:05

标签: scala guice

如果我的模块文件中有@Provides批注以返回对象,但我从未将其注入任何地方,是否会在scala中调用默认构造函数?

1 个答案:

答案 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!