Pull to refresh

Comments 7

Что-то вы намудрили.

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
Веб, но эти джобы бегут на таймере, а не как веб запросы.
Про thread scope я просто не знал.

thread scope нет. Он описан в документации как пример custom scope.

Короче, вариантов в Вашем случае может быть много, но от интерфейса надо избавляться.

Что бы это все работало надо указать
proxyMode = ScopedProxyMode.TARGET_CLASS
Это необходимо что бы создавался прокси вокруг бина, и этот прокси уже будет получать инстанс бина из scope

Так же как и для request scope бинов


Scope(value = "custom", proxyMode = ScopedProxyMode.TARGET_CLASS)

Sign up to leave a comment.

Articles