У меня есть Java-бин, определенный как REQUEST_SCOPE и с режимом прокси TARGET_CLASS.Примерно так:
@Configuration
public class TestObjectConfiguration {
@Bean("test-object")
@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
public UserInfo testObject() {
TestObject object = new TestObject();
object.setParameter("value");
return object;
}
}
Значение устанавливается для каждого запроса, принимая некоторые значения из заголовков запроса, и именно поэтому мне нужен bean-объект тестового объекта для определения объема запроса.Для простоты в этом примере я просто присваиваю «значение» String.
Затем я хочу получить его из @Service
или @Repository
(он же бобы Singleton).Я делаю это так:
@Service
public class MyServiceImpl implements MyService {
@Autowired
@Qualifier("test-object")
private TestObject object;
@Override
public void myMethod () {
logger.info(object.getParameter());
}
}
(Предположим, что регистратор определен в службе)
Значение object.parameter
равно нулю.Осматривая bean-компонент, он создается, и я вижу в нем параметры CGLIB, но все элементы внутри него равны нулю.
Класс простой, просто приватный String
s и List<String>
, с соответствующими установщиками идобытчики.Что-то похожее на это:
public class TestObject {
private String parameter;
public String getParameter() {
return parameter;
}
public void setParameter(String parameter) {
this.parameter = parameter;
}
}
Я проверил несколько источников документации, и они утверждают, что эта комбинация должна работать.На практике я вижу, что bean-компонент создается в случайное время во время запроса (классы с @Controller, которые вызывают singleton @Service
, которые вызывают DB @Repository
), но всегда со всеми параметрами null
.
Мне нужно как-то хранить информацию, собранную из заголовков, и делать ее доступной для @Service
и @Repository
классов во время запроса.
Есть идеи о том, что мне не хватает?Требуется ли для режима прокси какая-либо конфигурация, которую я забыл или не нашел в документации?