Много ли неиспользованных bean-компонентов в Spring Bean Context тратит значительные ресурсы? - PullRequest
7 голосов
/ 19 сентября 2008

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

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

Есть идеи?

Ответы [ 4 ]

7 голосов
/ 19 сентября 2008

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

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

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

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

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

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

5 голосов
/ 29 сентября 2008

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

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

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

0 голосов
/ 19 сентября 2008

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

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

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

0 голосов
/ 19 сентября 2008

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

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