#spring #spring-mvc #autowired
#spring #spring-mvc #автоматическое подключение
Вопрос:
Я пытаюсь лучше понять весеннюю инстанциацию компонентов. Чтобы проиллюстрировать мои сомнения, давайте предположим, что у нас есть класс обслуживания, подключенный к контроллеру, вот вопросы:
- Как Spring будет управлять жизненным циклом контроллера? Будет ли новый объект создаваться по запросу?
- Как только служба будет создана и подключена к контроллеру, будет ли Spring повторно использовать эту ссылку на объект для подключения к другим компонентам?
Ответ №1:
- Как и у сервлетов, жизненный цикл контроллеров выходит за рамки запросов. Все контроллеры в приложении создаются только один раз при запуске приложения; впоследствии эти объекты повторно используются для обслуживания всех запросов.
- Как указал Божо, по умолчанию все компоненты находятся в области singleton, поэтому они будут повторно использоваться везде, если не указано иное.
Ответ №2:
Область по умолчанию — singleton, что означает, что beans будут использоваться повторно (т. Е. 1) нет, новый объект не будет создаваться по запросу, и 2) да, ссылка на объект будет использоваться повторно).
Все это можно настроить. Взгляните на http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-factory-scopes .
Ответ №3:
Все зависит от области действия компонента. По умолчанию все компоненты находятся в области singleton, то есть они создаются контейнером только один раз.
Если вы укажете @Scope("request")
(или эквивалент xml), то один и тот же объект service (singleton) будет внедрен во все экземпляры контроллера с областью запроса. (Но вам редко нужны контроллеры с областью запросов)