嵌套@Configuration的多个类失败

时间:2016-08-14 06:10:22

标签: spring

我有两个班级:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class BaseConfiguratorServiceTest {

    @Configuration
    @ImportResource("/application-context.xml")
    static class ContextConfiguration {
        @Bean
        public BaseConfiguratorService baseConfiguratorService() {
            return new BaseConfiguratorService();
        }
    }
}

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class AnotherTest {

    @Configuration
    @ImportResource("/application-context.xml")
    static class AnotherConfiguration {
        @Bean
        public BaseConfiguratorService baseConfiguratorService() {
            return new BaseConfiguratorService();
        }
    }
}

我收到此错误消息:

Caused by: org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Only one AsyncAnnotationBeanPostProcessor may exist within the context.
Offending resource: class path resource [application-context.xml]

我不知道推理。我一次运行一个测试:

mvn test -Dtest = BaseConfiguraionTest

然后由于第二个类上下文没有在运行时加载,为什么spring应该关心另一个类是否有这个注释?除了spring怎么知道是否还有另一个用@Configuration注释的类。

1 个答案:

答案 0 :(得分:0)

我遇到了和你一样的问题,虽然我还不确定为什么会这样,但我发现这个答案解决了我(我们)的问题:https://stackoverflow.com/a/39307385/1410035

我正在使用@WebAppConfiguration(答案所针对的地址),但希望它仍适用于您的情况。

我在Spring 4.2.x FWIW上。此外,该链接答案来自相关Spring代码的作者,因此我们可能会相信它。