Заполнитель недвижимости для импорта /Bean Refs
Можно ли использовать свойство, загруженное из свойства-заполнителя, чтобы динамический импорт контекста?
<context:property-placeholder location="classpath*:/enterprise.properties"/>
<import resource="classpath*:/Fsb${jdbc.ctxType?:Jdbc}-context.xml"/>
Файл свойств
jdbc.ctxType=JTA
Таким образом, я могу изменить тип файла контекста, который загружается на основе свойства.
Кроме того, могу ли я сделать то же самое, чтобы сделать динамическое имя ссылки bean?
<bean id="personBusinessService" class="com.foo.PersonBusinessServiceImpl"
p:personUidDataService-ref="personUidDataService${personUidDataService.sib?:Api}"
p:identifierLookupSearchService-ref="identifierLookupSearchService${identifierLookupSearchService.sib?:Api}"
p:contactPointBusinessService-ref="contactPointBusinessService${contactPointBusinessService.sib?:Api}"
/>
Файл свойств
personUidDataService.sib=Stub
Джей
-------------------- Обновить пример свойства для ссылки --------------------- ----
Я создал файл свойств со следующей записью:
addressLookupSearchService.sib=DaoMock
Затем у меня следующая конфигурация в Spring Контекстном файле:
<context:property-placeholder location="classpath*:/simple.properties"/>
<!-- EntityManager will be injected into DAO by JPA annotations -->
<bean id="addressSearchDao" class="com.foo.AddressSearchDaoImpl"/>
<bean id="addressSearchDaoMock" class="com.foo.MockAddressSearchDaoImpl"/>
<bean id="addressLookupSearchService" class="com.foo.AddressLookupSearchServiceImpl"
p:baseDao-ref="addressSearch${addressLookupSearchService.sib?:Dao}"/>
И addressSearch ${addressLookupSearchService.sib?: Дао} не работает, он всегда по умолчанию
bean id addressSearchDao, даже если в моем объявлении указано, что он должен установить адресSearchDaoMock.
Любые мысли о том, что я делаю неправильно?
Ответы
Ответ 1
Это аналогичный вопрос этого.
Импорт разрешен до bean (создание-заполнитель), поэтому вы не можете использовать чтобы определить свойства, которые вы хотите использовать в инструкции импорта. В этом случае вы должны установить свойство как system property
(-Djdbc.ctxType=JTA
) (см. Ссылку - пункт Примечание).
Но использование свойств файла свойств в определениях bean отлично работает - что они предназначены для: -)
Обновление. Поскольку Spring 3.1 Унифицированное управление свойствами позволяет использовать свойства даже в импорте (спасибо @Jay Blanton за упоминание об этом в комментариях).
Ответ 2
Да, вы можете. Вы можете использовать выражения в импорте и впрысках.