Внедрение пружины и создание экземпляра объекта

#spring #spring-mvc #autowired

#spring #spring-mvc #автоматическое подключение

Вопрос:

Я пытаюсь лучше понять весеннюю инстанциацию компонентов. Чтобы проиллюстрировать мои сомнения, давайте предположим, что у нас есть класс обслуживания, подключенный к контроллеру, вот вопросы:

  1. Как Spring будет управлять жизненным циклом контроллера? Будет ли новый объект создаваться по запросу?
  2. Как только служба будет создана и подключена к контроллеру, будет ли Spring повторно использовать эту ссылку на объект для подключения к другим компонентам?

Ответ №1:

  1. Как и у сервлетов, жизненный цикл контроллеров выходит за рамки запросов. Все контроллеры в приложении создаются только один раз при запуске приложения; впоследствии эти объекты повторно используются для обслуживания всех запросов.
  2. Как указал Божо, по умолчанию все компоненты находятся в области 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) будет внедрен во все экземпляры контроллера с областью запроса. (Но вам редко нужны контроллеры с областью запросов)