美文网首页
Spring项目中混用@Configuration和xml(co

Spring项目中混用@Configuration和xml(co

作者: Faustest | 来源:发表于2018-08-23 20:03 被阅读0次

目前Spring支持:

  1. 传统的基于xml的配置方式, 一般使用bean标签配置bean
  2. JavaConfig 和Annotation-Driven的配置方式:启动注解驱动方式需要在xml文件中声名 <context:annotation-config/>,以扫描注解配置的component。
  3. @Configuration: 对类注解,指明类会被JavaConfig 作为bean的定义的来源。
    见: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/Configuration.html

在基于maven的ssm项目中,混合使用了<context:annotation-config/>和 @Configuration两种配置bean的方式,在使用junit做单元测试时,必须同时导入两种配置(context)
否则会报错:
java.lang.IllegalStateException: Failed to load ApplicationContext
......
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException NoSuchBeanDefinitionException
@ContextConfiguration内的属性声名:

    @AliasFor("value")
    String[] locations() default {};

    Class<?>[] classes() default {};

使用locations表明配置文件xml的位置,classes表明JavaConfig的配置类,但因为内部实现原因不可同时使用这两种方式。
若要正常测试,需要做一个迂回:
在test下,创建一个导入xml配置文件的类,并用@Configuration注解

@Configuration
@ImportResource({"classpath:context-1.xml", "classpath:context-2.xml"})
class TestConfig {
}

再统一使用classes包含所有context:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {SomeConfiguration.class, TestConfig.class})
public class RunRuleServiceTest {
  //
  //
}

解决方案如上

相关文章

网友评论

      本文标题:Spring项目中混用@Configuration和xml(co

      本文链接:https://www.haomeiwen.com/subject/bhnmiftx.html