Spring 类路径和文件系统之间的区别是什么?

Spring 类路径和文件系统之间的区别是什么?,spring,spring-mvc,Spring,Spring Mvc,我知道: ApplicationContext context=new ClassPathXmlApplicationContext(“bean.xml”) 从位于类路径中的XML文件加载上下文定义,将上下文定义视为类路径资源 ApplicationContext context=newfilesystemxmlapplicationcontext(“bean.xml”) 从文件系统中的XML文件加载上下文定义 XmlWebApplicationContext 从web应用程序中包含的XML

我知道:

  • ApplicationContext context=new ClassPathXmlApplicationContext(“bean.xml”)

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

  • ApplicationContext context=newfilesystemxmlapplicationcontext(“bean.xml”)

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

  • XmlWebApplicationContext

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

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

    谢谢:)

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

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

    • XmlWebApplicationContext
      当然可以访问web应用程序中包含的文件,但这不是最重要的。它实现了,这意味着它将检测bean、注册自定义范围(请求、会话等)以及其他内容


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

        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");
    

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

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

    您已经描述了它们在用法上的不同。在内部,它们有不同的行为,比如XmlWebApplicationContent默认情况下会在WEB-INF文件夹中查找applicationContext.xml。它还使用init参数来配置不同的位置。基本上,他们将使用不同的方法加载XML文件。这正是我想要的。谢谢:)