使用ClassPathXmlApplicationContext的applicationContext.xml的正确路径

时间:2011-01-26 09:18:10

标签: java spring integration-testing

我在WEB-INF / config / applicationContext.xml中使用applicationContext.xml处理web应用程序。现在我需要将一些测试工具实现为独立应用程序,它可以使用相同的applicationContext.xml,但是对于ClassPathXmlApplicationContext类的配置路径有问题。

我知道当我将applicationContext.xml复制到默认包(其中.java所在的位置)时,我可以使用ClassPathXmlApplicationContext(“applicationContext.xml”),但这是必要的吗?

import org.apache.log4j.Logger;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class AdminTool {

    private Logger log = Logger.getLogger(getClass());

    /** all below doesn't work - FileNotFoundException) **/
    private static final ApplicationContext ac = new ClassPathXmlApplicationContext("/WEB-INF/config/applicationContext.xml");
    private static final ApplicationContext ac = new ClassPathXmlApplicationContext("config/applicationContext.xml");
    private static final ApplicationContext ac = new ClassPathXmlApplicationContext("../config/applicationContext.xml");

    public static void main(String[] args) {
        new AdminTool();
    }

    public AdminTool() {
        log.debug(ac);
    }

}

5 个答案:

答案 0 :(得分:13)

在本地测试场景中,您不在Jar中,因此您不需要基于Classpath的访问。请改用FileSystemXmlApplicationContext

可能是这样的:

private static final ApplicationContext ac =
    new FileSystemXmlApplicationContext(
        "src/WEB-INF/config/applicationContext.xml"
    );

(路径与执行目录相对)

答案 1 :(得分:3)

这就是为什么我更喜欢将所有配置文件放在 classes 文件夹中的原因。事实上,使用Maven,您可以将所有这些文件放在 src / main / resources 中。然后,在测试文件中,您可以访问“ classpath:applicationContext.xml ”。

答案 2 :(得分:1)

private static final ApplicationContext ac =
    new FileSystemXmlApplicationContext(
        "/WEB-INF/config/applicationContext.xml"
    );

答案 3 :(得分:0)

private static final ApplicationContext ac =
new FileSystemXmlApplicationContext(
    "/WEB-INF/config/applicationContext.xml"
);

答案 4 :(得分:-1)

请转到属性> Java Build Path>项目源检查类路径并在类路径中添加WEB-INF之前的目录。绝对是它的工作