混合XML和Java配置

时间:2015-08-12 15:48:45

标签: spring spring-java-config

我正在使用AnnotationConfigApplicationContext将应用程序从XmlWebApplicationContext迁移到纯java配置解决方案。我在通过@ImportResource重用现有的xml配置文件时遇到问题。我们正在使用spring 3.2.11。

当我使用基于xml的上下文时,xml文件中定义的java是java配置(@Configuration)的bean会自动被上下文选中,并且它们定义的任何bean都是可见的。但是,通过@ImportResource导入时,不会创建配置对象中的@Beans。

这是一个单元测试,用于说明我的问题:

XmlConfigTest.java

@Test
public void testAnnotationContext()
{
    AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
    ctx.register(XmlFromJava.class);
    ctx.refresh();
    assertEquals("xml value", ctx.getBean("xmlBean", String.class));
    assertEquals("nested value", ctx.getBean("nestedBean", String.class));
}

@Test
public void testXmlContext()
{
    ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:test.xml");
    ctx.refresh();
    assertEquals("xml value", ctx.getBean("xmlBean", String.class));
    // fails here
    assertEquals("nested value", ctx.getBean("nestedBean", String.class));
}

@Configuration
@ImportResource("classpath:test.xml")
public static class XmlFromJava { }

NestedConfig.java

@Configuration
public class NestedConfig
{
    @Bean
    public String nestedBean()
    {
        return "nested value";
    }
}

的test.xml

<context:annotation-config/>

<bean class="NestedConfig"/>

<bean name="xmlBean" class="java.lang.String">
    <constructor-arg value="xml value"/>
</bean>

我希望bean'nestedBean'存在于NestedConfig类中。 testAnnotationContext()无法加载'nestedBean',但testXmlContext()无效。

0 个答案:

没有答案