Весна: Синглтон В.С. Прототип
Я новичок в Spring, начинаю изучать новые концепции, и я нашел тему, рассказывающую о бобовых областях: - Singleton: каждый раз возвращает один и тот же экземпляр. Prototype: возвращает новый экземпляр объекта для каждого запроса.
мой вопрос: как это полезно для меня, в чем разница между одним и тем же экземпляром и новым экземпляром объекта, или почему существует область прототипа!
4 ответа
Тот же экземпляр будет означать любой вызов (из любого места) getBean()
от ApplicationContext
или же BeanFactory
приземлит вас с тем же экземпляром, то есть конструктор вызывается только один раз, когда инициализируется Spring (для контейнера Spring).
Однако существуют сценарии, когда вы хотите, чтобы разные экземпляры объектов работали.
Например, если у вас есть объект Point в качестве переменной-члена в классе Triangle, то в случае Singleton, когда создается экземпляр класса Triangle, объект Point также создается, поскольку он является зависимым.
Если вам требуется другой экземпляр Point для работы в другом месте, вам нужно будет определить Point как прототип, иначе он будет иметь то же состояние.
Поиск в Google, несомненно, поможет вам найти ответы и примеры, демонстрирующие вариант использования.
Надеюсь это поможет.
В случае, если один и тот же экземпляр вводится везде как Singleton
Вы можете использовать его общее состояние для хранения любых данных. В случае, если новый экземпляр создается в любое время, когда бин вводится - его состояние не разделяется. По умолчанию все бины Singletons
, Prototype
область действия означает случаи, когда внутренние данные компонента должны быть уникальными для каждого места, в которое вы вводите компонент.
Пример: у вас есть компонент, представляющий REST-клиент. Различные части приложения используют разные службы REST, для каждой требуются определенные заголовки запросов - например, в целях безопасности. Вы можете внедрить один и тот же клиент REST во все эти bean-компоненты, чтобы иметь свой собственный bean-компонент REST с некоторыми конкретными заголовками. В то же время вы можете настроить общую политику клиента для всего приложения - время ожидания запроса и т. Д.
Смотрите также: Когда использовать область прототипа Spring?
Мое понимание Синглтона, скорее всего, используется в такой ситуации, как возврат единственного экземпляра Утилиты.
//SomeUtil is Singleton
var util = SomeUtil.getInstance();
print(util.doTask1());
print(util.doTask2());
Если другой поток входит в этот код, SomeUtil.getInstance() просто возвращает экземпляр SomeUtil, кроме создания нового (которое может стоить дорого для создания нового).
Что касается Prototype, я только что нашел эту ситуацию, используя Prototype:
Давайте разберемся с этой моделью на примере Я создаю развлекательное приложение, которое очень часто требует экземпляров классов "Кино", "Альбом" и "Показать". Я не хочу создавать их экземпляры каждый раз, потому что это дорого. Итак, я создам их экземпляры-прототипы, и каждый раз, когда мне понадобится новый экземпляр, я просто клонирую прототип.
Пример кода находит https://github.com/keenkit/DesignPattern/tree/master/src/PrototypePattern
Он помогает в разработке программного обеспечения, ссылается на шаблоны проектирования Java, которые вы заполняете, чтобы найти много полезной информации. В случае синглтона вы сможете создать только объект, это поможет таким случаям, как 1. сэкономить время при создании очень сложного объекта (мы можем использовать повторно один и тот же объект) 2. Иногда нам нужно использовать один и тот же объект во всем приложении. Например, если вы хотите подсчитать общее количество активных пользователей в приложении, вы можете использовать одноэлементный объект для его хранения, потому что будет только один объект, так что Вы можете легко обновлять и извлекать данные. В случае с Prototype он всегда будет давать вам другой объект, в некоторых случаях это необходимо, например, для какого-то токена доступа, вы всегда должны получить новый / действительный токен, чтобы продолжить работу, поэтому полезен прототип pattern /Bean.