16

我知道:

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

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

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

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

  3. XmlWebApplicationContext

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

但是,这到底是什么意思??

谢谢 :)

4

3 回答 3

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

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

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

于 2012-05-02T11:11:58.620 回答
1

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

于 2017-02-12T03:25:38.707 回答
0

我认为上面的意见可能有问题,FileSystemXmlApplicationContext 无法访问您的整个文件系统,它只能扫描您的整个项目文件夹。为了证明我的结论我举了一个例子,第一次使用ClasspathXmlApplicationContext一切正常,第二次我将 beans.xml 文件移动到我的桌面文件夹,因此项目 hiracy 中没有 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)

所以 FileSystemXmlApplicationContext 只能检测当前项目的所有文件夹。例如,您config在项目根目录下创建一个名为的目录,您可以更改主类代码,如下所示:

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

一切都会好起来的。因此,如果所有喜欢 sinuhepop 的人都说我认为应该有一些东西需要改变。

于 2016-11-10T10:12:04.383 回答