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

当Spring@Bean存储在ThreadLocal中时会发生什么?,spring,spring-boot,spring-bean,Spring,Spring Boot,Spring Bean,给定以下配置: @Configuration class TLConfig { @Bean fun foo() = tl.getOrSet { Foo("something") } private val tl = ThreadLocal<Foo>() } 是否只会创建一个Foo实例,或者会为每个需要bean的线程创建一个实例? 如果只创建了一个实例,当不同的线程尝试使用它时会发生什么? 免责声明:我不是在寻找关于如何做的建议。我只是想知道这段代码的行为。

给定以下配置:

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

    private val tl = ThreadLocal<Foo>()
}
是否只会创建一个Foo实例,或者会为每个需要bean的线程创建一个实例? 如果只创建了一个实例,当不同的线程尝试使用它时会发生什么?
免责声明:我不是在寻找关于如何做的建议。我只是想知道这段代码的行为。我并不是说这是一种做事情的好方法或坏方法,这只是我发现的东西,我不知道它的行为是什么。

它创建了一个实例默认范围是singleton并将其放入应用程序上下文中。因此,当您注入它时,无论哪个线程询问依赖项,它都会从那里产生。当bean初始化时,foo函数只调用一次