Подтвердить что ты не робот

Должны ли классы уровня обслуживания быть одиночными?

Я использую Spring framework. Должны ли мои классы обслуживания быть созданы как одиночные? Может кто-нибудь объяснить, почему или почему нет? Спасибо!

4b9b3361

Ответ 1

Да, они должны иметь область singleton. Службы должны быть без гражданства, и, следовательно, им не нужно больше одного экземпляра.

Таким образом, определение их в области singleton позволит сэкономить время для создания экземпляров и их проводки.

singleton - это область по умолчанию в spring, поэтому просто оставьте свои определения bean так, как они есть, без явного указания атрибута scope.

Подробнее о области можно узнать в spring docs.

Ответ 2

Spring проще использовать, если вы придерживаетесь одномодового beans. Синглтоны - это "позиция по умолчанию", если хотите. Да, он поддерживает другие области (используя scope="xyz" в XML файле), но это усложняет работу и ухудшает производительность.

По существу, если у вас нет веских оснований для этого, придерживайтесь синглетов.

Ответ 3

Вам нужны в основном одиночные игры. (Spring default.) Синглтоны должны быть потокобезопасными, поскольку параллельные запросы будут использовать один и тот же экземпляр. Фактически, они должны быть полностью без гражданства, потому что их можно уничтожить и воссоздать в любое время.

Если вам нужно отслеживать состояние внутри вашего bean (вы не должны, это должно быть в базе данных или сохранено в запросе), вы получите много экземпляров того же типа bean, memory использование увеличивается с количеством запросов, в результате чего с помощью синглтонов вы все равно будете иметь только один экземпляр.

Даже если вы задаете запрос beans для запроса, они все равно должны быть по крайней мере потокобезопасными (запросы, поступающие из одного и того же браузера одновременно).