2016-05-31 3 views
1

Я уже написал пару Spring загрузки приложения (на данный момент, один для веб-сайтов, один с помощью JavaFX и несколько CLI приложений). Хотя все работы, как и ожидалось, я в настоящее время борется с одной конкретной концепции рабочего стола или командной строки приложения: @Scope аннотацию для @Service с и @Component с.Что такое @Scope для компонентов в приложениях Spring/CLI для загрузки Spring?

Я недавно много читал о том, почему одиночные игры являются «злыми» или, по крайней мере, нежелательными, но для настольных приложений в настоящее время я не вижу другого способа реализовать его, поскольку большую часть времени в таких приложениях достаточно одного экземпляра ,

В Guice Я бы создал экземпляр (нестатический и не конечный) в моем модуле. В Весна Я использую @Scope ("singleton").

Что я хочу знать сейчас: Это чистое решение? Есть ли другое решение?

С уважением, Daniel

+2

Синглтоны не являются злыми, одноэлементный шаблон злой, но это разные вещи. Не делая вещи singleton и делая все запросы/сеансы могут даже усложнять ситуацию и делать вещи более интенсивными в памяти и менее эффективными. –

+1

Чтобы быть более точным: * статический одноэлементный шаблон * является злым, потому что он делает код трудным для тестирования и т. Д. Это не значит, что синглтоны всегда злы и их следует избегать. Нет ничего плохого в Spring Singleton beans. – Jesper

+0

Итак, чтобы подвести итог: я не сделал ничего плохого в аннотации сервисов с помощью Singleton scope.Но я бы использовал, если бы использовал старый шаблон синглтон. Правильно? ОК. Может быть, тогда кто-то может сделать «реальный» ответ (с точки зрения StackOverflow), и я проголосую за него и отметю его как правильно. Другие люди, спотыкающиеся об этом, будут знать, что правильно, без необходимости читать каждый комментарий. Заранее спасибо! – dzim

ответ

2

Статьи вы читаете это о Singleton шаблон. Многие считают Синглтон анти-шаблон, и есть много информации о том, почему. См. this answer по некоторым веским причинам, почему вы должны избегать шаблона .

Что вы имеете в виду, это одноэлементный как сфера. Весна не соответствует шаблону, объем синглтона просто указывает, что контейнер создаст только один экземпляр и будет использовать его для удовлетворения зависимостей. Может быть несколько контейнеров, каждый из которых имеет собственный экземпляр, или один контейнер, где beon - одноточечная область, а другой - это область прототипа.

Singleton - это по умолчанию весной, поэтому вам не нужно указывать его. Если у вас нет определенной причины, чтобы использовать другую область, то вам, вероятно, нужен синглтон по умолчанию. Иногда мне нужен фасоль до , а не, и в этом случае я могу использовать прототип . Пожалуйста, check the Spring documentation для получения дополнительной информации о доступных областях и их значении.

В любом случае ключевым отличием здесь является не реализация одноэлементного паттерна. Если Spring должен был реализовать такой шаблон, то мы ожидаем, что каждый контейнер будет иметь такой же экземпляр , что и вовсе не так.

+0

Как обсуждалось в более ранних комментариях, я Бут понимаю и принимаю это. Я был просто не уверен, так как я немного смутился из всех этих статей. Спасибо всем, что вы взяли, чтобы прояснить этот вопрос для меня! – dzim