1. Введение
До Spring 3.0 XML был единственным способом определения и настройки bean-компонентов. Spring 3.0 представил JavaConfig
, позволяющий нам настраивать bean-компоненты с использованием классов Java. Однако файлы конфигурации XML все еще используются сегодня.
В этом руководстве мы обсудим , как интегрировать XML-конфигурации в Spring Boot .
2. Аннотация @ImportResource
Аннотация @ImportResource
позволяет нам импортировать один или несколько ресурсов, содержащих определения компонентов.
Допустим, у нас есть файл beans.xml
с определением компонента:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<bean class="com.foreach.springbootxml.Pojo">
<property name="field" value="sample-value"></property>
</bean>
</beans>
Чтобы использовать его в приложении Spring Boot, мы можем использовать аннотацию @ImportResource
, сообщающую, где найти файл конфигурации:
@Configuration
@ImportResource("classpath:beans.xml")
public class SpringBootXmlApplication implements CommandLineRunner {
@Autowired
private Pojo pojo;
public static void main(String[] args) {
SpringApplication.run(SpringBootXmlApplication.class, args);
}
}
В этом случае экземпляр Pojo
будет внедрен с bean-компонентом, определенным в beans.xml
.
3. Доступ к свойствам в XML-конфигурациях
Как насчет использования свойств в файлах конфигурации XML? Допустим, мы хотим использовать свойство, объявленное в нашем файле application.properties :
sample=string loaded from properties!
Давайте обновим определение Pojo
в beans.xml
, включив свойство sample :
<bean class="com.foreach.springbootxml.Pojo">
<property name="field" value="${sample}"></property>
</bean>
Затем давайте проверим, правильно ли включено свойство:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringBootXmlApplication.class)
public class SpringBootXmlApplicationIntegrationTest {
@Autowired
private Pojo pojo;
@Value("${sample}")
private String sample;
@Test
public void whenCallingGetter_thenPrintingProperty() {
assertThat(pojo.getField())
.isNotBlank()
.isEqualTo(sample);
}
}
К сожалению, этот тест завершится ошибкой, поскольку по умолчанию файл конфигурации XML не может разрешать заполнители . Однако мы можем решить эту проблему, включив аннотацию @EnableAutoConfiguration
:
@Configuration
@EnableAutoConfiguration
@ImportResource("classpath:beans.xml")
public class SpringBootXmlApplication implements CommandLineRunner {
// ...
}
Эта аннотация включает автоматическую настройку и пытается настроить bean-компоненты.
4. Рекомендуемый подход
Мы можем продолжать использовать файлы конфигурации XML. Но мы также можем рассмотреть возможность переноса всей конфигурации в JavaConfig
по нескольким причинам. Во- первых, настройка bean-компонентов в Java безопасна с точки зрения типов , поэтому мы будем отлавливать ошибки типов во время компиляции. Кроме того, конфигурация XML может стать довольно большой , что затруднит ее обслуживание.
5. Вывод
В этой статье мы увидели, как использовать файлы конфигурации XML для определения наших компонентов в приложении Spring Boot. Как всегда, исходный код примера, который мы использовали, доступен на GitHub .