Приводит ли наличие большого количества неиспользуемых bean-компонентов в контексте Spring Bean впустую значительные ресурсы?

StackOverflow https://stackoverflow.com/questions/98320

  •  01-07-2019
  •  | 
  •  

Вопрос

Мой уровень модели используется несколькими различными проектами, и я хотел бы использовать один файл конфигурации XML Spring для модели независимо от того, какой проект его использует.

Мой вопрос:Поскольку не все bean-компоненты используются во всех проектах, трачу ли я значительные ресурсы, если их экземпляры не создаются?Я не слишком уверен, насколько Spring ленив в их загрузке, поскольку до сих пор это никогда не было проблемой.

Есть идеи?

Это было полезно?

Решение

Взято из Справочное руководство Spring:

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

Однако бывают случаи, когда такое поведение не соответствует ожиданиям.Если вы не хотите, чтобы одноэлементный компонент был предварительно создан при использовании ApplicationContext, вы можете выборочно контролировать это, пометив определение компонента как лениво инициализированное.Компонент с ленивой инициализацией указывает контейнеру IoC, следует ли создавать экземпляр компонента при запуске или при первом запросе.

При настройке bean-компонентов через XML эта отложенная загрузка контролируется атрибутом lazy-init в [bean element];например:

<bean id="lazy" class="com.foo.ExpensiveToCreateBean" lazy-init="true"/>

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

Другие советы

В дополнение к другим комментариям:также можно указать весь файл конфигурации для ленивой инициализации, используя атрибут default-lazy-init в файле <beans/> элемент;например:

<beans default-lazy-init="true">
    <!-- no beans will be pre-instantiated... -->
</beans>

Это гораздо проще, чем добавлять lazy-init атрибутируйте каждому бобу, если у вас их много.

По умолчанию bean-компоненты Spring являются одиночными и создаются при создании контекста приложения (при запуске).Итак, если вы не переопределили поведение по умолчанию, тогда будет создан один экземпляр каждого компонента.

Зависит от объектов.

Однако неиспользуемый код является «бесполезным» и увеличивает стоимость обслуживания.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top