Próbuję skonfigurować komponent bean o zakresie żądania wiosnę .
Skonfigurowałem go pomyślnie, więc fasola jest tworzona raz na żądanie. Teraz musi uzyskać dostęp do obiektu HttpServletRequest.
Ponieważ fasola jest tworzona raz na żądanie, domyślam się, że kontener może łatwo wstrzyknąć obiekt żądania do mojego ziarna. Jak mogę to zrobić ?
Spring ujawnia bieżący
HttpServletRequest
obiekt (jak również bieżącyHttpSession
obiekt) przez obiekt opakowujący typuServletRequestAttributes
. Ten obiekt otoki jest powiązany z ThreadLocal i jest uzyskiwany przez wywołaniestatic
metodyRequestContextHolder.currentRequestAttributes()
.ServletRequestAttributes
zapewnia metodęgetRequest()
pobierania bieżącego żądania,getSession()
pobierania bieżącej sesji i innych metod pobierania atrybutów przechowywanych w obu zakresach. Poniższy kod, choć nieco brzydki, powinien dostarczyć aktualny obiekt żądania w dowolnym miejscu aplikacji:Zwróć uwagę, że
RequestContextHolder.currentRequestAttributes()
metoda zwraca interfejs i musi zostać zeskanowana doServletRequestAttributes
tego, który implementuje interfejs.Spring Javadoc: RequestContextHolder | ServletRequestAttributes
źródło
Jak zasugerowano tutaj , możesz również wstrzyknąć parametr
HttpServletRequest
jako metodę, np .:źródło