Перейти к основному содержимому

Компоненты XML, определенные в Spring Boot

· 2 мин. чтения

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 .