Spring应用程序上下文 - 主文件夹和测试文件夹

时间:2016-03-22 20:05:23

标签: java spring junit applicationcontext

我有一个包含4个典型源文件夹的Spring项目 - main/srcmain/resourcestest/srctest/resources。当我运行我的应用程序时,Spring在main/resources中获取应用程序上下文文件,如果我运行任何Junit测试,它将获取application-context.xml下的test/resources文件。 Spring如何适当地获取application-context.xml文件或是否涉及任何配置?

3 个答案:

答案 0 :(得分:1)

尝试使用jsfStruts运行任何其他项目,他们也会从相应的文件夹中选择资源。它与春天无关。它将由maven或您正在使用的任何其他构建系统处理。

main/src , main/resources , test/src , test/resources 

创建maven或gradle项目时,这些文件夹是标准文件。

答案 1 :(得分:1)

应用程序告诉Spring应用程序上下文的位置。 Web应用程序通过在web.xml中配置ContextLoaderListener来完成此操作。 对于每个测试,如何加载应用程序上下文是测试配置的一部分,@ ContextConfiguration注释指定如何从哪个位置或从带注释的类加载上下文。

例如,如果我设置测试使用

@ContextConfiguration(loader = AnnotationConfigContextLoader.class,
classes = MyTest.ContextConfiguration.class)
public class MyTest {
    @Autowired MyStuff stuff;

    static class ContextConfiguration {
        @Bean public MyStuff getMyStuff() {
            return new MyStuff();
        }
    }
}

然后MyTest使用测试中的注释来决定注入的内容,并使用指定的ContextConfiguration填充这些字段。它完全忽略了类路径中的任何xml配置。

上下文加载器还可以指定加载上下文的位置,请参阅org.springframework.test.context.ContextLoader的文档。

您没有说明您正在使用的是哪个版本的Spring。在3.0测试之前,通过实现类org.springframework.test.AbstractSpringContextTests的抽象方法loadContext来管理测试上下文,这是Spring感知测试扩展的层次结构的一部分。

答案 2 :(得分:1)

我知道这个问题很旧,但是对于Spring-boot 2.x,文件夹结构是不同的。 这是我从Spring初始值设定项和IntelliJ中得到的:

enter image description here