我正在使用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()无效。