Guice如何注入类型安全配置?

问题描述 投票:1回答:1

最近,我正在阅读一些使用Guice注入Typesafe Config的scala代码。对我来说,这如何工作似乎有些不可思议。我的问题是,如何解释此代码? Guice是否将所有在sbt-assembly中读取的配置值自动注入到typesafe config中?

Scala代码:

class FooImpl @Inject() (
  config: Config
) extends Foo {

  private val myConfig = "section.foo"

  override val batchSize = config.getInt(s"$myConfig.batchSize")

  .....
}

在Setting.scala中

object Settings {
    ...
    assemblyMergeStrategy in assembly := {
      case "prod.conf" => MergeStrategy.concat
      case x =>
        val oldStrategy = (assemblyMergeStrategy in assembly).value
        oldStrategy(x)
    }
  ...

在prod.conf中

section {

  foo {
    batchSize = 10000
...
scala sbt guice sbt-assembly typesafe-config
1个回答
0
投票

我认为您在这里混合了三种不同的机制:)

  1. @@ Inject的确是Guice,这是该过程的最后一步。简而言之,Guice有一个“依赖注入容器”,它知道在哪里查找某些类型的实例。它知道的一种类型是ConfigHow知道这取决于您使用的框架(或者如果不使用它,则如何实例化Guice容器);

  2. Typesafe config具有在哪里寻找配置的规则。 Readme总结起来很不错,但是总之,它在资源文件夹(或者实际上是在类路径中的任何位置)中找到application.conf,然后导入application.conf明确导入的所有其他文件(使用import other_conf.conf) 。我假设在您的情况下,import prod.conf

  3. 中的某个位置有application.conf
  4. Assembly-只是将所有依赖项中的所有资源放入一个巨大的资源文件夹中-指定有关具有相同名称的多个文件时的处理规则。就您而言,它告诉它只是将它们串联起来。

© www.soinside.com 2019 - 2024. All rights reserved.