1. 序章
Spring 3.0以前は、Beanを定義および構成する唯一の方法はXMLでした。 Spring3.0ではJavaConfigが導入され、Javaクラスを使用してBeanを構成できるようになりました。 ただし、XML構成ファイルは現在でも使用されています。
このチュートリアルでは、XML構成をSpring Bootに統合する方法について説明します。
2. @ImportResourceアノテーション
@ImportResource アノテーションを使用すると、Bean定義を含む1つ以上のリソースをインポートできます。
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);
}
}
この場合、 Pojo インスタンスには、beans.xmlで定義されたBeanが注入されます。
3. XML構成のプロパティへのアクセス
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>
次に、プロパティが適切に含まれているかどうかを確認しましょう。
@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構成ファイルを使用してSpringBootアプリケーションでBeanを定義する方法について説明しました。 いつものように、使用した例のソースコードは、GitHubでから入手できます。