类路径,文件系统有什么区别?

时间:2012-05-02 10:48:57

标签: spring spring-mvc

我知道:

  1. ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");

    从位于类路径中的XML文件加载上下文定义,将上下文定义视为类路径资源。

  2. ApplicationContext context = new FileSystemXmlApplicationContext("bean.xml");

    从文件系统中的XML文件加载上下文定义。

  3. XmlWebApplicationContext

    从Web应用程序中包含的XML文件加载上下文定义。

  4. 但是,它究竟意味着什么?

    谢谢:)

3 个答案:

答案 0 :(得分:23)

  • ClassPathXmlApplicationContext将从您的类路径中读取文件。它们必须位于您的网络应用程序的classes文件夹中或jar文件夹中的lib

  • FileSystemXmlApplicationContext可以访问您的所有文件系统,例如c:/config/applicationContext.xml

  • XmlWebApplicationContext当然可以访问您的Web应用程序中包含的文件,但这不是最重要的事情。它实现了WebApplicationContext,这意味着它将检测ServletContextAware bean,注册自定义范围(请求,会话,...)等。

答案 1 :(得分:1)

FileSystemXmlApplicationContext-您需要提供xml bean的完整完整路径 ClassPathXmlApplicationContext - 在这种情况下,只要设置了类路径,就不需要设置完整路径

答案 2 :(得分:0)

我认为上述观点可能有问题,FileSystemXmlApplicationContext 无法访问您的整个文件系统,它只能扫描的是您的整个项目文件夹。为了证明我的结论我举一个例子,首先使用ClasspathXmlApplicationContext并且一切正常,第二次将beans.xml文件移动到我的桌面文件夹,因此项目hirachy中没有beans.xml文件,并将ClassPathXmlApplicationContext更改为{{1出现问题,错误跟踪如下:

FileSytemXmlApplicationContext

因此FileSystemXmlApplicationContext只能检测当前项目的所有文件夹。例如,您在项目根目录下创建一个名为 INFO: Loading XML bean definitions from file [/Users/crabime/Development/IdeaProjects/springInterview/Users/crabime/Desktop/beans.xml] Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from file [/Users/crabime/Development/IdeaProjects/springInterview/Users/crabime/Desktop/beans.xml]; nested exception is java.io.FileNotFoundException: Users/crabime/Desktop/beans.xml (No such file or directory) 的目录,您可以更改您的主类代码,如下所示:

config

一切都会好起来的。因此,如果像sinuhepop一样,我认为应该有一些事情需要改变。