2017-02-05 10 views
1

У меня есть приложение, в котором я должен прочитать все свойства приложения из файлов свойств. Затем переопределите их из внешней структуры кэша. Затем инициализируйте весенние бобы.Delay spring xml import

Я использую Java Config весны, чтобы читать свойства и переопределять их. И используя @import для загрузки xml-файлов. Но xml-файлы импортируются, как только контекст начинает загружаться, в результате чего все xml-компоненты инициализируются.

Так есть способ, которым я могу отложить импорт файлов XML, пока я не загружу все свойства сначала?

ответ

0

Вы можете использовать следующий код.

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

или индивидуально добавьте lazy-init на бобы, которые вы не хотите загружать.

Или

Есть много способов, вы можете достичь ваших требования Один из которых может быть использование depends-on или @DependsOn, если вы ищете конфигурации на основе аннотаций,

Вы можете прочитать файл свойств после того, вы можете создать кеш-бэк и использовать в зависимости от того, сможет ли контейнер знать, что ваш bean-компонент зависит от какого-либо другого компонента, вы можете инициализировать кеш-бэк и использовать то же, что сочтете нужным.

Подробнее об этом example.

<bean id="primaryBean" depends-on="cacheBean"></bean> 

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

Другие, чем это можно реализовать интерфейс LifeCycle

public interface Lifecycle { 

    void start(); 
    void stop(); 
    boolean isRunning(); 
} 

Для получения дополнительной литературы вы можете обратиться spring docs.

+0

Спасибо Vipul, но уловка я не могу изменить весны xml beans, которые я собираюсь импортировать. Поэтому я не могу добавить ленивый init или зависит от этих xml-файлов. – Devilethon

+0

Используйте аннотацию @DependsOn вместо xml-подхода. –