Бин REQUEST_SCOPE с прокси-режимом TARGET_CLASS видит только нулевые параметры при внедрении в другие компоненты, такие как @ Service или @ Repository's - PullRequest
0 голосов
/ 17 октября 2018

У меня есть 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 классов во время запроса.

Есть идеи о том, что мне не хватает?Требуется ли для режима прокси какая-либо конфигурация, которую я забыл или не нашел в документации?

...