从不同于classpath的位置加载spring XML以在Servlet中获取bean

时间:2013-11-13 17:33:44

标签: java spring java-ee spring-mvc

我有一个Servlet类,它应该从服务中获取数据并将数据写回servlet响应。 service类已在spring xml(dispatcher-servlet.xml)中声明。所以我希望从service class bean获取dispatcher-servlet.xml

我试过下面的代码

            ApplicationContext context = new FileSystemXmlApplicationContext("classpath:../WebContent/WEB-INF/dispatcher-servlet.xml");
        ServiceImpl serviceImpl = (ServiceImpl) context.getBean("service");

及以下代码

            ServletContextResource res = new ServletContextResource(getServletContext(),"/WEB-INF/dispatcher-servlet.xml");
        ApplicationContext context = new FileSystemXmlApplicationContext("file:"+res.getURL()+"dispatcher-servlet.xml");
        ServiceImpl serviceImpl = (ServiceImpl) context.getBean("service");

但是那些正在抛出FileNotFoundException

如果我将dispatcher-servlet.xml移动到src文件夹,它可以正常工作。但是我无法移动它,因为dispatcher-servlet.xml已经在WEB-INF中存在了很长时间很多其他类正在使用它。 dispatcher-servlet.xml在Web.xml中正确声明,并且加载并正常工作。

唯一的问题是我无法从servlet类的java代码中加载它。

dispatcher-xml的位置是/WebContent/WEB-INF/dispatcher-servlet.xml

非常感谢任何指针或变通方法。感谢。

2 个答案:

答案 0 :(得分:2)

WEB-INF已添加到classpath

您可以尝试以下代码

ApplicationContext context = new FileSystemXmlApplicationContext
              ("classpath:/../dispatcher-servlet.xml");

根据Sotirios Delimanolis

的建议,考虑阅读类路径是什么以及将Web应用的哪些部分添加到类路径中

答案 1 :(得分:0)

在您的servlet代码中,您尝试过:

ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(getServletContext(),
"org.springframework.web.servlet.FrameworkServlet.CONTEXT.dispatcher");

您需要确保在web.xml中的调度程序servlet之后初始化您的servlet(使用load-on-startup元素)。