У меня есть приложение Spring Boot, и мне нужно иметь bean-объекты, связанные с потоками.Я хочу решение, где мне нужно использовать SpringThreadThreadScope.Я попытался автоматически подключить его к @Components, но, основываясь на журналах, которые я печатаю, похоже, что Spring не создает новый компонент для каждого порожденного потока.Как правильно настроить / настроить bean-компонент?
Вот мой контроллер
@RestController
public class Controller {
@Autowired
private DummyClass dummyClass;
@Autowired
private DummyService1 svc;
@PostMapping
public Result myPostMethod (@RequestBody Request request) {
LOGGER.info("myPostMethod " + Thread.currentThread().getName() + " " + Integer.toHexString(this.dummyClass.hashCode()));
this.svc.doSomething();
return new Result();
}
}
Мои примеры служб
@Service
public class DummyService1 {
@Autowired
private DummyClass dummyClass;
@Autowired
private DummyService2 service;
public void doSomething () {
LOGGER.info("doSomething " + Thread.currentThread().getName() + " " + Integer.toHexString(this.dummyClass.hashCode()));
this.service.doSomething2();
}
}
@Service
public class DummyService2 {
@Autowired
private DummyClass dummyClass;
public void doSomething2 () {
LOGGER.info("doSomething2 " + Thread.currentThread().getName() + " " + Integer.toHexString(this.dummyClass.hashCode()));
}
}
Моя конфигурация
@Configuration
public class MyConfig implements WebMvcConfigurer {
@Bean
@Scope(value = "thread", proxyMode = ScopedProxyMode.TARGET_CLASS)
public DummyClass dummyClass () {
DummyClass ctx = new DummyClass();
return ctx;
}
@Bean
public static BeanFactoryPostProcessor beanFactoryPostProcessor () {
return new CustomScopeRegisteringBeanFactoryPostProcessor();
}
}
public class CustomScopeRegisteringBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
@Override
public void postProcessBeanFactory (ConfigurableListableBeanFactory beanFactory) throws BeansException {
beanFactory.registerScope("thread", new SimpleThreadScope());
}
}
Фактический вывод после 2 выполнений
myPostMethod http-nio-8080-exec-4 81823b32
doSomething http-nio-8080-exec-4 81823b32
doSomething2 http-nio-8080-exec-4 81823b32
myPostMethod http-nio-8080-exec-8 81823b32
doSomething http-nio-8080-exec-8 81823b32
doSomething2 http-nio-8080-exec-8 81823b32
Ожидаемый вывод после 2 выполнений
myPostMethod http-nio-8080-exec-4 81823b32
doSomething http-nio-8080-exec-4 81823b32
doSomething2 http-nio-8080-exec-4 81823b32
myPostMethod http-nio-8080-exec-8 9a5170d
doSomething http-nio-8080-exec-8 9a5170d
doSomething2 http-nio-8080-exec-8 9a5170d
Я заметил, что если я выполняю метод (set или get) в DummyClass, новый экземплярбудет создан на поток.Моя проблема заключается в том, что вновь созданный объект не внедряется в компоненты (DummyService1 и DummyService2)