0

我正在使用 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)

在此处输入图像描述

任何帮助将非常感激。

谢谢。

4

2 回答 2

2

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

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

在此处输入图像描述

于 2012-07-04T08:06:37.340 回答
1

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

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

如果要ApplicationContext在 Spring bean 内部访问,可以使用ApplicationContextAware或自动装配。如果您想在 Spring bean 之外执行此操作(例如,在Servlet或中Filter),您可以使用WebApplicationContextUtils.

更新:

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

@Autowired
private UserDao userDao;

另请注意,如果UserDaoImpl是实现UserDao接口的类,则在声明依赖项时使用接口会更好。

于 2012-07-04T08:41:11.757 回答