如何从依赖项目访问Spring上下文?

时间:2013-09-03 19:02:42

标签: java spring classpath applicationcontext

假设我有两个项目:

ProjectA and ProjectB
ProjectA depends on ProjectB

我有一个 context.xml 位于 ProjectB / target / test-classes / context.xml 。现在我需要从ProjectA中讨厌上下文。在projectB中,我有一个访问者类:

Class ContextAccessor{
    ApplicationContext context = new
        ClassPathXmlApplicationContext("context.xml");

    public static ApplicationContext getContext(){
        return context;
    }
}

在ProjectA中,我正在尝试使用以下方式获取上下文:

ContextAccessor.getContext();

但它会抛出一条带有消息的异常:

Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: IOException     parsing XML document from class path resource [context.xml]; nested exception is java.io.FileNotFoundException: class path resource [context.xml] cannot be opened because it does not exist
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:341)
at 

请提出建议。鉴赏。

3 个答案:

答案 0 :(得分:0)

您需要在ProjectA的类路径中确保ProjectB(我认为它打包为jar)。如果你正在使用Maven,请参考here,了解如何做到这一点。

一旦它在类路径中,您应该能够使用上面给出的代码创建上下文。还要确保context.xml的位置正确传递给构造函数,请参阅JavaDoc ClassPathXmlApplicationContext

答案 1 :(得分:0)

我认为你没有在Project的项目依赖项中添加Project。请添加并重试。

答案 2 :(得分:0)

我终于通过使用:

解决了这个问题
Class ContextAccessor{
    ApplicationContext context = new
        FileSystemXmlApplicationContext(this.getClass().getProtectionDomain().
        getCodeSource().getLocation().getPath());

    public static ApplicationContext getContext(){
        return context;
    }
}

假设上下文位于 ProjectB / target / classes / context.xml