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-компонента с отложенным инициализацией.


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки