0

我在Spring MVC世界中使用SpringSource套裝2.9.2和新手。我嘗試過使用下面的代碼應用程序上下文對象來獲取一個保持: -Spring框架 - root-context.xml FileNotFoundException?

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) 

enter image description here

任何幫助將非常感激。

謝謝。

+1

你的** root-context.xml **在哪裏? 'ApplicationContext context = new ClassPathXmlApplicationContext(「root-context.xml」);' - 爲了使這個語句正常工作,您需要在類路徑中擁有** root-context.xml ** src –

+0

它由SpringSource Suite在src /main/webapp/WEB-INF/spring/root-context.xml。我試圖創建一個新的定義文件,名爲spring.xml,它與src文件夾平行,但我仍然得到相同的異常。 – Varundroid

+0

不平行。它必須是src/spring.xml –

回答

2

這裏主要的問題是,爲什麼你需要創建Web應用程序的新應用程序上下文而不是使用現有的。

據我所知,您的設置中應該有ContextLoaderListenerDispatcherServlet在您的web.xml中聲明。如果是這樣,你需要訪問這些類加載的上下文,而不是創建一個新的類。

如果您想訪問Spring bean內的ApplicationContext,可以使用ApplicationContextAware或自動裝配。如果您想在Spring bean之外執行此操作(例如,在ServletFilter中),則可以使用WebApplicationContextUtils

UPDATE:

你並不需要訪問ApplicationContext在這種情況下。如果你想一個的Spring bean(DAO)注入到另一個(控制器),您可以使用自動裝配:

@Autowired 
private UserDao userDao; 

還要注意的是,如果UserDaoImpl是實現UserDao接口的類這將是更好地使用接口時,聲明依賴關係。

+0

感謝您強調真正的問題。我更新了我的代碼。你可以請看看,並告訴我是否有任何替代使用ApplicationContextAware獲得DaoImpl實例的過程?我在UsersDaoImpl.java中使用Autowired從root-context.xml獲取數據源。 – Varundroid

+0

你想在哪裏得到'UsersDaoImpl'?無論如何,你不應該創造新的環境,你應該使用現有的環境。 – axtavt

+0

在我的HomeController類中。我是Spring框架的新手,並使用SpringSource套件提供的默認文件結構。你能告訴我如何獲得現有的ApplicationObject? – Varundroid

2

機會是春天無法找到它在你的課堂路徑。

將該文件放在/ src/main/resources下(如圖所示)。 PS:這是我的一般做法,至今一直沒有失敗。
參考圖像,在這裏我的上下文文件是application-web-context.xml

enter image description here