У меня есть XML-файл конфигурации, содержащий util:map
, и каждый ключевой элемент ссылается на bean-компонент.
<util:map id="map">
<entry key="category1" value-ref="category1.bean1"/>
<entry key="category2" value-ref="category2.bean1"/>
<entry key="category3" value-ref="category3.bean1"/>
<entry key="category4" value-ref="category4.bean1"/>
</util:map>
По сути, для каждого ключа на карте ссылается и создается боб. Теперь каждый компонент ссылается на другой компонент, и это продолжается еще 5 раз, т. Е. Всего создается 7 компонентов
map-key -> bean1 -> bean2 -> ... -> bean7
Теперь, если я хочу добавить еще одну категорию на карту, мне придется продублировать содержимое файла конфигурации XML. Пока карта имеет 4 категории, то есть: 7 x 4 = 28 бобов, и я не вижу леса из-за деревьев.
Чего я хочу добиться: на основе значения ключа создать 7 бинов, не дублируя содержимое файла XML.
Итак, чтобы сделать это, я только сохранил карту в XML, и все XML-бины были перемещены в код. Я создал 7 классов, каждый из которых отмечен @Configuration
и @PropertySource(value = "classpath:/${category1}/overrides.properties")
, где category1
- это папка, а override.properties
содержит одинаковый набор ключей, но с разными значениями для каждой категории. У каждого класса есть поле с пружиной Environment
с автопроводкой, с помощью которого считываются свойства.
Я не нашел способа динамически загрузить заполнитель категории. Я хотел бы знать, могу ли я загрузить значение заполнителя на основе категории и прочитать это значение из ключей карты. То есть заполнитель принимает значение category1
, когда category1.bean1
полностью до category1.bean7
, category2
, когда category2.bean1
до category2.bean7
, и т. Д.
Заранее спасибо.