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.xmlPojo定義を更新して、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から入手できます。