簡體   English   中英

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

[英]How does Guice inject typesafe config?

最近我正在閱讀一些使用 Guice 注入類型安全配置的 Scala 代碼..這對我來說是如何工作的似乎有點神奇..我的問題是,如何解釋這段代碼? Guice 是否會將 sbt-assembly 中讀取的所有配置值自動注入類型安全配置?

斯卡拉代碼:

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

  private val myConfig = "section.foo"

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

  .....
}

在設置.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
...

我認為你在這里混合了三種不同的機制:)

  1. @Inject 確實是 Guice,這是該過程的最后一步。 簡單地說,Guice 有一個“依賴注入容器”,它知道去哪里尋找特定類型的實例。 它知道的類型之一是Config 如何知道這取決於您使用的框架(或者如果您不使用它,您如何實例化您的 Guice 容器);

  2. 類型安全配置有關於在哪里尋找配置的規則。 自述文件總結得很好,但簡而言之 - 它在資源文件夾(或者,實際上,在類路徑上的任何位置)中找到 application.conf,然后導入application.conf顯式導入的所有其他文件(使用import other_conf.conf )。 我在你的情況下,假設有import prod.conf在某處application.conf

  3. 程序集 - 只是將所有依賴項中的所有資源放入一個巨大的資源文件夾中 - 指定在存在多個同名文件時要做什么的規則。 在你的情況下,它告訴它只是連接它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM