Spring IoC контейнер: зависимости, лениво инициализированные бины

По умолчанию реализации ApplicationContext жадно (eagerly) создают и настраивают все одноэлементные компоненты (singleton) как часть процесса инициализации. Как правило, это предварительное создание является желательным, потому что ошибки в конфигурации или окружающей среде обнаруживаются немедленно, в отличие от часов или даже дней спустя. Когда такое поведение нежелательно, вы можете предотвратить предварительное создание экземпляра одноэлементного компонента, пометив определение компонента как инициализируемое с отложенной передачей (lazy-initialized). Лениво-инициализированный bean-компонент указывает контейнеру IoC создать экземпляр bean-компонента при первом запросе, а не при запуске.

В XML это поведение контролируется атрибутом lazy-init элемента <bean/>, как показано в следующем примере:

<bean id="lazy" class="com.something.ExpensiveToCreateBean" lazy-init="true"/>
<bean name="not.lazy" class="com.something.AnotherBean"/>

Когда предыдущая конфигурация используется ApplicationContext, lazy bean-компонент не создается заранее (eagerly), когда запускается ApplicationContext, в то время как bean-компонент not.lazy охотно (eagerly) предварительно создается.

Однако, когда лениво-инициализированный бин является зависимостью от одноэлементного бина (singleton), который не является лениво-инициализированным, ApplicationContext создает лениво-инициализированный бин при запуске, поскольку он должен удовлетворять зависимостям синглтона. Лениво-инициализированный bean-компонент вводится в одноэлементный bean-компонент, который не является лениво-инициализированным.

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

<beans default-lazy-init="true">
    <!-- бины не будут предварительно созданы... -->
</beans>


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки