Весенние синглтон-бобы в высокой нагрузке - PullRequest
2 голосов
/ 22 ноября 2010

Привет, у меня вопрос по многопоточности.Во-первых, сколько существует экземпляров DispatcherServlet / DispatcherPorlet?Это всегда единственный?Даже когда, скажем, 10 запросов в секунду?Как насчет сервисов, которые по умолчанию одноразовые.Если у меня есть bean-компонент validationService, который вводится в обработчик для обеспечения проверки запроса как одноэлементный (по умолчанию), могу ли я полагаться на тот факт, что это одноэлементный объект и в некоторых случаях он не будет повторно реализован?

Ответы [ 2 ]

0 голосов
/ 22 ноября 2010

Это интересный вопрос.

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

Вопрос в том, что происходит с предыдущими версиями спецификации Servlet, но я не уверен, что это поведение явно указано.

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

0 голосов
/ 22 ноября 2010

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

Как и для бинов Spring singleton, это синглтоны для каждого веб-приложения.- контекст приложения Spring хранится в контексте сервлета (доступ к нему можно получить с помощью WebApplicationContextUtils.getWebApplicationContext (ServletContext) ).

Что касается надежности: да, вы можете положиться на фактчто в области действия одного контекста приложения Spring, , существует только один экземпляр каждого одноэлементного компонента .

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