Область применения RestController и Controller весной - PullRequest
0 голосов
/ 21 мая 2018

Какой должна быть область действия Controller и RestController в приложении Spring?Поведение по умолчанию, если используется Singleton.Но не будет, чтобы один компонент пересекал запрос / ответы от нескольких клиентов, так как наш Контроллер будет вызывать какой-то другой компонент (скажем, @Service), который обрабатывает пользовательский запрос (например, выборку пользовательских данных из БД или из другой службы REST / SOAP).

1 Ответ

0 голосов
/ 21 мая 2018

У вас есть две опции:

Вариант 1. В ваших классах обслуживания убедитесь, что вы не сохраняете детали запроса в переменных экземпляра.Вместо этого передайте их как аргументы метода.

Например:

Приведенный ниже код повредит значение, сохраненное в userId, если есть одновременные запросы.

@Service
public class SomeService {

    String userId;

    public void processRequest(String userId, String orderId) {
        this.userId = userId;
        // Some code
        process(orderId);
    }

    public void process(String orderId) {
        // code that uses orderId
    }

}

В то время какследующий код является безопасным.

@Service
public class SomeService {

    private String userId;

    public void processRequest(String userId, String orderId) {
        // Some code
        process(userId, orderId);
    }

    public void process(String userId, String orderId) {
        // code that uses userId and orderId
    }

}

Вариант 2:

Вы можете сохранить конкретные данные запроса в bean-объектах области запроса и вставить их в свои синглтоны.Spring создает прокси для встраиваемых bean-объектов в области запросов и прокси-вызовов для bean-компонента, связанного с текущим запросом.

@RequestScoped
class UserInfo {
}


@Service
class UserService {

    @Autowired
    private UserInfo userInfo;

    public void process(String orderId) {
        // It is safe to invoke methods of userInfo here. The calls will be passed to the bean associated with the current request.
    }
}
...