Должны ли классы сервисного уровня быть одиночными - PullRequest
24 голосов
/ 31 января 2010

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

Ответы [ 3 ]

36 голосов
/ 31 января 2010

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

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

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

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

2 голосов
/ 31 января 2010

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

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

1 голос
/ 31 января 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...