我正在学习Spring认证,我对如何正确地将新的FileSystemXmlApplicationContext声明为Spring 4应用程序有疑问。
我知道,在我的main()方法中,我可以得到如下内容:
ApplicationContext context = new FileSystemXmlApplicationContext("classpath:mycompany.mydivision.myapplication.application.config.xml", "file:test-infra-config.xml");所以,如果我说的是错误的断言,请纠正我的错误,这一行将从两个不同的文件中创建Spring上下文(我将从中获取bean的对象),这些文件包含我的应用程序的bean定义,分别命名为test-infra-config.xml.和config.xml
我的疑问是:第一个是从类路径获取的,第二个是从文件中获取的。
我认为第二条路径相对于JVM工作目录,第一条路径来自应用程序类路径(定义在项目中,还是什么?)
我的疑问是:在Spring 4中,使用类路径:和文件:前缀是强制性的吗?
据我所知,我可以省略文件:前缀,但不能忽略类路径:前缀(但我不确定它在Spring3版本中是正确的,还是在改变4版本中的某些内容)。如果是真的,为什么我可以省略文件:前缀,而不能省略类路径:前缀?
Tnx
发布于 2015-04-13 09:04:19
很多问题:
我认为第二个路径相对于JVM工作目录和
对,是这样
应用程序类路径中的第一个类路径(在项目中定义,还是什么?)
它是JVM在运行应用程序时使用的类路径。
我的疑问是:在Spring 4中,类路径:和文件:前缀的使用是强制性的吗?
FileSystemXmlApplicationContext以
独立的XML应用程序上下文,从文件系统或URL获取上下文定义文件,将普通路径解释为相对的文件系统位置(例如"mydir/myfile.txt")。适用于测试线束以及独立环境。 注意:普通路径总是被解释为相对于当前VM工作目录,即使它们以斜杠开头。(这与Servlet容器中的语义一致。)使用显式" file :“前缀强制执行绝对文件路径。
据我所理解,我可以省略文件:前缀,但不能忽略类路径:前缀(但我不确定它在Spring 3版本中是正确的,还是在改变4版本中的某些内容)。
正确( Spring 3和4之间没有变化(参见javadoc))
如果这是真的,为什么我可以省略文件:前缀,而不是类路径:前缀?
因为您只能有一个默认值:当您没有指定路径是重新填充到文件(系统)还是类路径时,那么spring必须决定在哪里搜索该文件--他们决定将其作为文件(系统)引用处理。
(我还可以想象,这可能是由于一些历史和向后兼容的原因,也许Spring的第一个版本当时只支持没有任何前缀的文件方式。-但这是一种没有知识的猜测)
发布于 2015-04-13 11:42:39
我认为你应该看看资源文件,你的许多问题都会得到解答。
在这里,您会发现正在使用的ApplicationContext的实现是定义特定的资源类型,以将所提供的字符串资源位置解释为除非应用到字符串的前缀。
因此,例如,如果:
ApplicationContext ctx = new ClassPathXmlApplicationContext("my/appCtx.xml");ClassPathResource将用于加载资源位置。它将查看应用程序的JVM类路径的类路径。
或者,如果:
ApplicationContext ctx = new FileSystemXmlApplicationContext("my/appCtx.xml");然后从文件系统位置检索ctx文件。除非在字符串位置强制使用前缀来查看类路径,否则:
ApplicationContext ctx = new FileSystemXmlApplicationContext("classpath:my/appCtx.xml");现在回到你的例子:
ApplicationContext context = new FileSystemXmlApplicationContext("classpath:mycompany.mydivision.myapplication.application.config.xml", "file:test-infra-config.xml");因此,本质上,您是直接在定位器字符串上标识前缀,即查找的方法。如果将文件前缀排除在第二个字符串之外,则应用程序上下文的执行将推断出该前缀。
总之,在资源定位器字符串前面找不到前缀并不意味着与Spring 3相比,它是Spring 4的一个高级特性,而是在场景中使用基于应用程序上下文实现的资源。
ps。就Spring 3和4而言,在上述方面没有任何差异。
https://stackoverflow.com/questions/29601076
复制相似问题