2012-05-02 58 views
8

我知道:类路径,文件系统有什么区别?

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

    负荷从位于classpath中的XML文件,处理上下文定义为类路径资源上下文定义。从文件系统中的一个XML文件

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

    负荷上下文定义。从包含在Web应用程序中的XML文件

  3. XmlWebApplicationContext

    负荷上下文定义。

但是,究竟是什么意思?

谢谢:)

+4

您已经描述了他们如何在使用不同。在内部它们具有不同的行为,例如XmlWebApplicationContent,默认情况下会在WEB-INF文件夹中查找applicationContext.xml。并且它还需要init参数来配置不同的位置。基本上他们将使用不同的方法来加载XML文件。 – Seshagiri

回答

16
  • ClassPathXmlApplicationContext将读取你的classpath的文件。它们必须位于您的Web应用程序的classes文件夹中,或位于lib文件夹中的jar中。

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

  • XmlWebApplicationContext当然可以访问Web应用程序中包含的文件,但这不是最重要的。它实现了WebApplicationContext,这意味着它将检测到ServletContextAware bean,注册自定义作用域(request,session,...)等等。

+0

这就是我想要的。谢谢 :) –

0

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

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) 

因此F ileSystemXmlApplicationContext只能检测当前项目的所有文件夹。比如你做一个该项目的根目录下创建名为config目录,你可以改变你的主类代码象下面这样:

ApplicationContext atx = new FileSystemXmlApplicationContext("/config/beans.xml"); 

,一切都会好的一次。所以如果所有人都喜欢sinuhepop说我认为应该有些事情需要改变。

0

FileSystemXmlApplicationContext-您需要提供的XML bean 的ClassPathXmlApplicationContext完整的完整路径 - 在这种情况下,你DONOT需要设置全路径,只要classpath中设置

相关问题