在 Spring Boot 中通过 XML 定义 Bean
1、概览
在 Spring 3.0 之前,XML 是定义和配置 Bean 的唯一方法。Spring 3.0 引入了 JavaConfig,允许我们使用 Java 类配置 Bean。不过,如今有些项目仍然在使用 XML 配置文件。
本文将带你了解如何在 Spring Boot 应用中整合 XML 配置。
2、@ImportResource 注解
@ImportResource
注解可以导入一个或多个包含 Bean 定义的资源。
比方说,我们有一个包含 Bean 定义的 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.baeldung.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);
}
}
如上例,SpringBootXmlApplication
中注入的 Pojo
实例,来自于 beans.xml
中定义的 Bean。
3、访问配置属性
如何在 XML 配置文件中使用属性?比方说,我们要使用 application.properties
文件中声明的属性:
sample=string loaded from properties!
更新 beans.xml
中的 Pojo
定义,以包含 sample
属性:
<bean class="com.baeldung.springbootxml.Pojo">
<property name="field" value="${sample}"></property>
</bean>
接下来,测试该 properties 是否被正确地加载了:
@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
中,原因有以下几点。首先,在 Java 中配置 Bean 是类型安全的,因此可以在编译时捕获到类型错误。此外,XML 配置文件可能会非常庞大,因此很难维护。
5、总结
本文介绍了如何使用 XML 配置在 Spring Boot 应用中定义 Bean。
Ref:https://www.baeldung.com/spring-boot-xml-beans