当 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 的线程创建一个实例?
- 如果只创建一个实例,当不同的线程尝试使用它时会发生什么情况?
免责声明:我不是在寻找有关如何操作的建议。我只想知道这段代码的行为方式。我并不是说这是一种好的或坏的做事方式,这只是我发现的东西,我不知道这是什么行为。
它创建一个实例(默认范围是单例)并将其放入应用程序上下文中。所以当你注入它时,它会从那里来,不管哪个线程询问依赖。 foo
函数仅在初始化 bean 时调用一次。
给定以下配置:
@Configuration
class TLConfig {
@Bean
fun foo() = tl.getOrSet { Foo("something") }
private val tl = ThreadLocal<Foo>()
}
- 是否只会创建一个
Foo
实例,或者是否会为每个需要该 bean 的线程创建一个实例? - 如果只创建一个实例,当不同的线程尝试使用它时会发生什么情况?
免责声明:我不是在寻找有关如何操作的建议。我只想知道这段代码的行为方式。我并不是说这是一种好的或坏的做事方式,这只是我发现的东西,我不知道这是什么行为。
它创建一个实例(默认范围是单例)并将其放入应用程序上下文中。所以当你注入它时,它会从那里来,不管哪个线程询问依赖。 foo
函数仅在初始化 bean 时调用一次。