【问题标题】:Spring Framework - root-context.xml FileNotFoundException?Spring Framework - root-context.xml FileNotFoundException?
【发布时间】:2012-07-04 07:41:33
【问题描述】:

我正在使用 SpringSource 套装 2.9.2 和 Spring MVC 世界的新手。我正在尝试使用以下代码来保留应用程序上下文的对象:-

ApplicationContext context = new ClassPathXmlApplicationContext("root-context.xml");
UsersDaoImpl usersDao = context.getBean("usersDaoImpl", UsersDaoImpl.class);
Users user = usersDao.getUsers(name);
return user;

它返回我FileNotFoundException 异常。我也为前尝试了不同的路径。 spring/root-context.xml 等,但似乎没有任何效果。这是一个堆栈跟踪:-

java.io.FileNotFoundException: class path resource [root-context.xml] cannot be opened because it does not exist
    org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:158)
    org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:328)
    org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
    org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174)
    org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209)
    org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)
    org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:243)
    org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:127)
    org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:93)
    org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:131)
    org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:522)
    org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:436)
    org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
    org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
    com.varundroid.demos.HomeController.testingDatabase(HomeController.java:65)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)
    org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:212)
    org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126)
    org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)
    org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:900)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:827)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

任何帮助将不胜感激。

谢谢。

【问题讨论】:

  • 你的 root-context.xml 在哪里? ApplicationContext context = new ClassPathXmlApplicationContext("root-context.xml"); - 要使此语句起作用,您需要在类路径中有 root-context.xml 即 src
  • 它是由 SpringSource Suite 在 src/main/webapp/WEB-INF/spring/root-context.xml 创建的。我尝试创建一个名为 spring.xml 的新定义文件,它与 src 文件夹平行,但我仍然得到相同的异常。
  • 不平行。必须是 src/spring.xml
  • 也试过了。我上传了我的文件结构的图像,看看它,你可能会发现我在这里做错了什么。

标签: spring spring-mvc filenotfoundexception applicationcontext


【解决方案1】:

Spring 可能无法在您的类路径中找到它。

将该文件放在 /src/main/resources 下(如图所示)。
PS:这是我的一般做法,到目前为止从未失败过。
参考图片,这里我的上下文文件是application-web-context.xml

【讨论】:

    【解决方案2】:

    这里的主要问题是为什么你需要在 web 应用程序中创建新的应用程序上下文而不是使用现有的。

    据我从您的设置中可以看出,您应该在您的web.xml 中声明了ContextLoaderListenerDispatcherServlet。如果是这样,您需要访问由这些类加载的上下文,而不是创建一个新的。

    如果你想在 Spring bean 中访问 ApplicationContext,你可以使用 ApplicationContextAware 或自动装配。如果你想在 Spring bean 之外进行(例如,在ServletFilter 中),你可以使用WebApplicationContextUtils

    更新:

    在这种情况下,您不需要访问 ApplicationContext。如果你想将一个 Spring bean (DAO) 注入另一个(控制器),你可以使用自动装配:

    @Autowired
    private UserDao userDao;
    

    还要注意,如果UserDaoImpl 是一个实现UserDao 接口的类,那么在声明依赖关系时最好使用接口。

    【讨论】:

    • 感谢您强调真正的问题。我已经更新了我的代码。您能否看一下并告诉我,除了使用 ApplicationContextAware 获取 DaoImpl 实例的过程之外,还有什么替代方法吗?我在我的 UsersDaoImpl.java 中使用 Autowired 从 root-context.xml 获取数据源。
    • 你想从哪里得到UsersDaoImpl?无论如何,你不应该创建新的上下文,你应该使用现有的。
    • 在我的 HomeController 类中。我是 Spring 框架的新手,使用 SpringSource 套件提供的默认文件结构。你能告诉我如何获取现有的 ApplicationObject 吗?
    • 我遇到了一个奇怪的问题,请您看看。 stackoverflow.com/questions/11360273/…
    猜你喜欢
    • 2016-02-16
    • 1970-01-01
    • 2010-09-30
    • 2012-05-10
    • 2022-12-20
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多