Не могу понять `@Autowired HttpServletRequest` из Spring-MVC хорошо

В нашем весеннем приложении мы используемHttpServletRequest двумя способами:

(код здесь прост и кажется бессмысленным)

В контроллере:

@RequestMapping(value = "/hello", method = RequestMethod.GET)
@ResponseBody
public ResponseEntity<String> hello(HttpServletRequest request) {
    System.out.println("## controller req.hashcode: " + request.hashCode());
    System.out.println("## header 'abc': " + request.getHeader("abc"));
    return new ResponseEntity<String>("OK", HttpStatus.OK);
}

В нормальном компоненте:

@Component
class RequestService {
    private final HttpServletRequest request;
    @Autowired
    public RequestService(HttpServletRequest request) {
        this.request = request;
    }
    public String getHeaderAbc() {
        System.out.println("## service req.hashcode: " + request.hashCode());
        return this.request.getHeader("abc");
    }
}

Сначала я думал, что 2-й путь совершенно неверен, потому что он должен только вводитьrequest экземпляр один раз. Поэтому независимо от того, когда я призываюgetHeaderAbc() метод, он должен вернуть то же значение (из первого запроса).

Но когда я попробовал это, я обнаружил несколько интересных вещей:

request.hashCode() в контроллере всегда разные (как я и ожидал)request.hashCode() вRequestService всегда одно и то же (как я и думал)Но значение заголовка будет другим, если я отправлю запрос с другим заголовкомabc !!!

Похоже на синглтонRequestServiceВесной держитrequest экземпляр, но изменил заголовки, которые он содержит!

Как понять это?

Ответы на вопрос(1)

Ваш ответ на вопрос