Spring IoC контейнер: абстракция Environment, профили определения компонентов, XML
Аналогом в XML является атрибут profile элемента <beans>. Наш предыдущий пример конфигурации можно переписать в два файла XML следующим образом:
<beans profile="development"
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xsi:schemaLocation="...">
<jdbc:embedded-database id="dataSource">
<jdbc:script location="classpath:com/bank/config/sql/schema.sql"/>
<jdbc:script location="classpath:com/bank/config/sql/test-data.sql"/>
</jdbc:embedded-database>
</beans>
<beans profile="production"
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="...">
<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/datasource"/>
</beans>
Также можно избежать разделения и вложения элементов <beans/> в один файл, как показано в следующем примере:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="...">
<!-- определения других компонентов -->
<beans profile="development">
<jdbc:embedded-database id="dataSource">
<jdbc:script location="classpath:com/bank/config/sql/schema.sql"/>
<jdbc:script location="classpath:com/bank/config/sql/test-data.sql"/>
</jdbc:embedded-database>
</beans>
<beans profile="production">
<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/datasource"/>
</beans>
</beans>
spring-bean.xsd был ограничен, чтобы разрешить такие элементы только как последние в файле. Это должно помочь обеспечить гибкость без беспорядка в файлах XML.
Аналог XML не поддерживает описанные ранее выражения профиля. Однако можно отменить профиль с помощью ! оператора. Также можно применить логическое "И", вложив профили, как показано в следующем примере:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="...">
<!-- определения других компонентов -->
<beans profile="production">
<beans profile="us-east">
<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/datasource"/>
</beans>
</beans>
</beans>
В предыдущем примере bean-компонент dataSource доступен, если активны профили production и us-east.
Читайте также:
- Spring IoC контейнер: абстракция Environment
- Spring IoC контейнер: абстракция Environment, профили определения компонентов
- Spring IoC контейнер: абстракция Environment, профили определения компонентов, использование @Profile
Комментарии
Отправить комментарий