Что происходит, когда Spring @Bean хранится в ThreadLocal? - PullRequest
0 голосов
/ 17 июня 2020

Учитывая следующую конфигурацию:

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

    private val tl = ThreadLocal<Foo>()
}
  • Будет ли создан только один экземпляр Foo или будет создан экземпляр для каждого потока, которому нужен компонент?
  • Если создан только один экземпляр, что произойдет, когда разные потоки попытаются его использовать?

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я не ищу предложений, что делать вместо этого. Я просто хочу знать, как будет вести себя этот код. Я не утверждаю, что это хороший или плохой способ делать что-то, это просто то, что я нашел, и я понятия не имею, каково его поведение.

1 Ответ

1 голос
/ 17 июня 2020

Он создает один экземпляр (по умолчанию - singleton) и помещает его в контекст приложения. Поэтому, когда вы вводите его, он будет исходить оттуда, независимо от того, какой поток запрашивает зависимость. Функция foo вызывается только один раз при инициализации bean-компонента.

...