Изменяемое поле в @Service: сколько экземпляров бина в приложении
В сервисе отчётов накапливают строки прямо в поле бина:
@Service
public class ReportService {
private final List<String> rows = new ArrayList<>();
public void addRow(String row) { rows.add(row); }
public List<String> build() { return rows; }
}
Сервис вызывается из REST-контроллера. Что верно про поведение этого кода под нагрузкой?
- Spring создаёт новый экземпляр бина на каждый HTTP-запрос, поэтому строки не пересекаются
- Бин по умолчанию один на всё приложение: список общий для всех запросов и потоков, в отчёты попадут чужие строки
- Spring создаёт по экземпляру на поток обработки запроса, поэтому проблема возможна только при @Async
- Spring сам синхронизирует доступ к полям бина, поэтому данные будут корректны, просто медленнее
