Я сталкиваюсь со странной ситуацией, когда бин SCOPE_REQUEST становится одноэлементным при его ручной инициализации.Ниже приведено подробное описание:
A Область действия запроса:
@Component
@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
public class ServiceHeader {
private String correlationId;
private String requestId;
private String requestedBy;
//getters & setters
}
Автоматически подключен этот компонент к классу обслуживания
@Service
public class ExportService {
@Autowired
private ServiceHeader serviceHeader;
//Regular service method that access to variables of the request
public void exportPdf(){
logger.info(serviceHeader.getRequestBy());
}
//The method that cause issue
public void nastyExport(){
serviceHeader = new ServiceHeader();
serviceHeader.getRequestBy("Admin");
logger.info(serviceHeader.getRequestBy());
}
}
/*There is also an Interceptor class that
get all request headers and assign to the ServiceHeader bean*/
Для обычного запроса, что метод export ()переменные в компоненте ServiceHeader правильно получаются из запроса.
Однако, когда вызывается метод nastyExport (), ServiceHeader инициализируется службой вручную.С этого момента, если метод export () вызывается снова, serviceHeader.getRequestBy () всегда возвращает последнее значение, установленное в методе nastyExport ().
Может кто-нибудь посоветовать, почему эта проблема возникает?Я не вижу нигде упоминания о том, что bean-компонент автоматически конвертируется из области действия Request в Singleton, когда он инициализируется вручную.
Есть ли способ предотвратить инициализацию вручную?