如何使用 Spring 5 和 Kotlin 访问 Bean 定义 DSL 的 beans 元素中的环境属性

How to access Environment properties in the beans element of the Bean Definition DSL using Spring 5 and Kotlin

我想根据 Spring 引导应用程序的 application.yml 文件中某些属性的值定义一些 bean。例如,使用 number-of-beans: 5 我构建了一个 for 循环来创建 5 个 bean 实例:

application.yml

number-of-beans: 5

BeanDsl.kt

fun beans() = beans {
    val n = env.getProperty("number-of-beans")
    for (i in 1..n) {
        bean<String>("string${i}") { "string${i}" }
    } 
}

问题是此时如何访问环境,因为环境变量在那里不可用。有趣的是它在 bean{} 元素中。

Spring Framework 5.0 不可能,但我刚刚通过 this commit 添加了此类支持,此改进将在 Spring Framework 5.1 / Spring 启动 2.1.