Spring IoC контейнер: точки расширения контейнера, подстановка имени класса PropertySourcesPlaceholderConfigurer
Вы можете использовать PropertySourcesPlaceholderConfigurer для вывода значений свойств из определения компонента в отдельный файл, используя стандартный формат свойств Java. Это позволяет человеку, развертывающему приложение, настраивать свойства среды, такие как URL-адреса и пароли базы данных, без сложности или риска изменения основного файла определения XML или файлов для контейнера.
Рассмотрим следующий фрагмент метаданных конфигурации на основе XML, в котором определен источник данных со значениями-заполнителями:
<bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
<property name="locations" value="classpath:com/something/jdbc.properties"/>
</bean>
<bean id="dataSource" destroy-method="close"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
В примере показаны свойства, настроенные из внешнего файла свойств. Во время выполнения к метаданным применяется PropertySourcesPlaceholderConfigurer, который заменяет некоторые свойства DataSource. Заменяемые значения указываются в качестве заполнителей в форме ${property-name}, которая соответствует стилю Ant, log4j и JSP EL.
Фактические значения поступают из другого файла в стандартном формате свойств Java:
jdbc.driverClassName=org.hsqldb.jdbcDriver
jdbc.url=jdbc:hsqldb:hsql://production:9002
jdbc.username=sa
jdbc.password=root
Поэтому строка ${jdbc.username} заменяется во время выполнения на значение 'sa', и то же самое применяется для других значений заполнителей, которые соответствуют ключам в файле свойств. PropertySourcesPlaceholderConfigurer проверяет заполнители в большинстве свойств и атрибутов определения компонента. Кроме того, вы можете настроить префикс и суффикс местозаполнителя.
С помощью пространства имен контекста, представленного в Spring 2.5, вы можете настроить заполнители свойств с помощью выделенного элемента конфигурации. Вы можете указать одно или несколько местоположений в виде списка через запятую в атрибуте местоположения, как показано в следующем примере:
<context:property-placeholder location="classpath:com/something/jdbc.properties"/>
PropertySourcesPlaceholderConfigurer не только ищет свойства в указанном вами файле свойств. По умолчанию, если он не может найти свойство в указанных файлах свойств, он проверяет свойства Spring Environment и обычные Java System свойства.
Вы можете использовать PropertySourcesPlaceholderConfigurer для замены имен классов, что иногда полезно, когда вам нужно выбрать определенный класс реализации во время выполнения. В следующем примере показано, как это сделать:
<bean class="org.springframework.beans.factory.config.PropertySourcesPlaceholderConfigurer">
<property name="locations">
<value>classpath:com/something/strategy.properties</value>
</property>
<property name="properties">
<value>custom.strategy.class=com.something.DefaultStrategy</value>
</property>
</bean>
<bean id="serviceStrategy" class="${custom.strategy.class}"/>
Если класс не может быть преобразован во время выполнения в допустимый класс, разрешение bean-компонента завершается неудачно, когда он собирается быть созданным, что происходит на этапе preInstantiateSingletons() ApplicationContext для bean-компонента с отложенным инициализацией.
Читайте также:
- Spring IoC контейнер: точки расширения контейнера, BeanPostProcessor
- Spring IoC контейнер: точки расширения контейнера, пример использования BeanPostProcessor
- Spring IoC контейнер: точки расширения контейнера, BeanFactoryPostProcessor
Комментарии
Отправить комментарий