当 Spring @Bean 存储在 ThreadLocal 中时会发生什么?

What happens when Spring @Bean is stored in a ThreadLocal?

给定以下配置:

@Configuration
class TLConfig {
    @Bean
    fun foo() = tl.getOrSet { Foo("something") }

    private val tl = ThreadLocal<Foo>()
}

免责声明:我不是在寻找有关如何操作的建议。我只想知道这段代码的行为方式。我并不是说这是一种好的或坏的做事方式,这只是我发现的东西,我不知道这是什么行为。

它创建一个实例(默认范围是单例)并将其放入应用程序上下文中。所以当你注入它时,它会从那里来,不管哪个线程询问依赖。 foo 函数仅在初始化 bean 时调用一次。