Comments 7
Что-то вы намудрили.
AbstractCustomerScopeBean долой! Почему просто не инъектить customer и reloadType? Что мешает Вам поместить их в тот же скоп?
В CustomerContextThreadLocal новый контекст будет создаваться мало того для каждой нити, но и каждый раз когда Вы входите в область видимости. Если уж вы делаете скоп для кастомера, то и делайте его для кастомера, а не для нити. Да и для нити то получилось так себе.
Скорее всего, вам скоп вовсе не нужен. Сделайте customer и reloadType spring beans'ами и инъектьте, на здоровье в синглтоны. Если у вас сервисы без состояния, конечно.
AbstractCustomerScopeBean долой! Почему просто не инъектить customer и reloadType? Что мешает Вам поместить их в тот же скоп?
В CustomerContextThreadLocal новый контекст будет создаваться мало того для каждой нити, но и каждый раз когда Вы входите в область видимости. Если уж вы делаете скоп для кастомера, то и делайте его для кастомера, а не для нити. Да и для нити то получилось так себе.
Скорее всего, вам скоп вовсе не нужен. Сделайте customer и reloadType spring beans'ами и инъектьте, на здоровье в синглтоны. Если у вас сервисы без состояния, конечно.
Я не могу инжектить customer и reloadType — у меня же бежит параллельно несколько процессов для казных клиентов, как он будет знать какой инстанс инжектить?
Предположим, customer у Вас в request scope. А сервис — singleton. Тогда Spring заинъектит прокси-объект, который, в зависимости от thread будет проксировать нужного customer. Если у вас не веб приложение, а всё сложнее, тогда да, нужно создавать кастомный scope, скорее всего хватит thread scope из примера в документации.
docs.spring.io/spring/docs/4.1.0.BUILD-SNAPSHOT/spring-framework-reference/htmlsingle/#beans-factory-scopes-other-injection
docs.spring.io/spring/docs/4.1.0.BUILD-SNAPSHOT/spring-framework-reference/htmlsingle/#beans-factory-scopes-other-injection
Что бы это все работало надо указать
proxyMode = ScopedProxyMode.TARGET_CLASS
Это необходимо что бы создавался прокси вокруг бина, и этот прокси уже будет получать инстанс бина из scope
Так же как и для request scope бинов
Scope(value = "custom", proxyMode = ScopedProxyMode.TARGET_CLASS)
Sign up to leave a comment.
Spring bean custom scope