В настоящее время у меня есть веб-служба REST, использующая Spring RestController. Я реализовал HandlerInterceptorAdapter, где хочу установить некоторые пользовательские данные.
Код такой:
@Component
public class UserContextInterceptor extends HandlerInterceptorAdapter {
@Autowired
private UserContext userContext;
@Override
public boolean preHandle (HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//set userContext here
userContext.setLoginId("loginId");
return true;
}
}
Вот RestController:
@RestController
public class MyController {
@Autowired
private MyService myService;
@GetMapping
public Response processRequest(Request request) {
return myService.processRequest(request);
}
}
Вот Служба. Это просто вызывается контроллером:
@Service
public class MyService {
@Autowired
private UserContext userContext;
public Response processRequest(Request request) {
//process request using userContext
if (userContext.getLoginId() == null)
throw new InvalidloginException("No login id!");
//do something else
return new Response();
}
}
UserContext - это просто POJO, содержащий пользовательские поля.
В моей реализации UserContext, как мне кажется, не является потокобезопасным. Объект UserContext будет переопределяться каждый раз, когда приходит запрос. Я хотел бы знать, как правильно автоматизировать / аннотировать его таким образом, чтобы я хотел, чтобы новый UserContext каждый раз, когда приходит запрос. И этот UserContext будет правильно вставлен в MyService. Это означает, что все вызовы в MyService.processRequest всегда будут иметь другой UserContext, введенный в него.
Одно из решений, о котором я думал, заключалось в том, чтобы просто передать объект UserContext в метод MyService.processRequest (). Мне просто интересно, можно ли решить эту проблему с помощью Spring autowire или других аннотаций.
Любые идеи?
Спасибо!
@KishoreKirdat Вы правы. Запросить bean-компонент для решения моей проблемы. Я использовал этот stackoverflow.com/a/36318183/2682526 для решения




Вы можете использовать bean-компонент с ограниченным объемом запроса вместо одноэлементного bean-компонента, как описано в baeldung.com/spring-bean-scopes