Что означают компоненты stateful и stateless в Spring? Я много гуглил, но не нашел удовлетворительного ответа.
Любая помощь будет оценена по достоинству.
Что означают компоненты stateful и stateless в Spring? Я много гуглил, но не нашел удовлетворительного ответа.
Любая помощь будет оценена по достоинству.
Состояние чаще всего представлено переменной поля, которая не связана автоматически.
Итак, это bean-компонент с состоянием:
@Component
public class Stateful {
private int someCounter;
...
}
Stateless — это bean-компонент, который не имеет переменных уровня класса или только экземпляры singleton bean-компонентов, автоматически привязанные к типам без сохранения состояния.
В основном все, что может изменить значение в этом bean-компоненте и его дереве зависимостей (кроме локальных переменных в методах), является состоянием, и его следует избегать, насколько это возможно.
Итак, мой пример — это небезопасный для потоков антипаттерн, потому что такой определенный bean-компонент является одноэлементным. И singleton bean должен быть без гражданства.
В основном Spring не позволяет использовать bean-компоненты с состоянием. Если вы используете Singleton - у вас проблемы - следующий вызов "увидит" старые данные. Если вы используете Prototype - каждый вызов любого метода этого bean-компонента приведет к созданию нового экземпляра класса, что опять же не то, что вам нужно.
Кажется, что решение - использовать ключевое слово new
всякий раз, когда вам нужны классы с отслеживанием состояния.
Или используйте оставшуюся область запроса или сеанса, однако они доступны только в веб-контейнере.