我面临一种奇怪的情况,即当手动初始化SCOPE_REQUEST bean时,它变成了Singleton。下面是详细信息:
请求范围Bean:
@Component
@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
public class ServiceHeader {
private String correlationId;
private String requestId;
private String requestedBy;
//getters & setters
}
自动将该bean连接到Service类
@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 bean中的变量是从请求中正确获取的。
但是,当调用nastyExport()方法时,ServiceHeader将由服务手动初始化。从那时起,如果再次调用export()方法,则serviceHeader.getRequestBy()始终返回nastyExport()方法中设置的最后一个值。
任何人都可以建议为什么发生此问题吗?我没有看到任何地方提到该bean在手动初始化时会自动从Request转换为Singleton范围。
有什么方法可以防止手动初始化的发生吗?