Представьте себе поставленный контекст приложения с разными фазами. Мы начинаем с раннего этапа, чтобы определить необходимую инфраструктуру. Контексты приложения xml загружаются последовательно.
Причиной разделить эти файлы является механизм расширения/плагина.
Этап 01-default-configuration.xml
Мы готовим и объявляем карту с id exampleMapping
, чтобы позднее их улучшить с помощью данных.
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="[...]">
<util:map id="exampleMapping" />
</beans>
Stage 02-custom-configuration.xml (необязательно)
Мы настраиваем exampleMapping
и добавляем запись.
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="[...]">
<util:map id="exampleMapping">
<entry key="theKey" value="theValue" />
</util:map>
</beans>
Этап 03-make-use-of-configuration.xml (обязательно)
Использует определенную карту exampleMapping
, независимо от того, настроена ли она по-отдельности или по-прежнему остается пустой объявленной картой.
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="[...]">
<bean id="exampleService" class="com.stackoverflow.example.ExampleService">
<property name="mapping" ref="exampleMapping" />
</bean>
</beans>
Проблема заключается в том, что после первого этапа невозможно добавить записи на карту exampleMapping
. Spring выдает исключение, что карта с id exampleMapping
уже существует. Если мы оставим первый этап, то карта не объявлена, и третий этап не сможет решить exampleMapping
, который также создает исключение.
Как я могу решить эту проблему? Я читал Слияние коллекций (spring docs), но это не помогло. Можно ли добавлять значения позже в карты/списки перед их использованием?
Спасибо!