ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
未附加到`FileSystemApplicationContext`(即`FileSystemApplicationContext`不是实际的`ResourceLoader`)的`FileSystemResource`将按照您的预期处理绝对路径和相对路径。 相对路径是相对于当前工作目录的,而绝对路径是相对于文件系统的根。 但是,为了向后兼容(历史)原因,当`FileSystemApplicationContext`是`ResourceLoader`时会发生变化。 `FileSystemApplicationContext`只是强制所有附加的`FileSystemResource`实例将所有位置路径视为相对,无论它们是否以一个前导斜杠开始。 实际上,这意味着以下内容是等同的: ~~~java ApplicationContext ctx = new FileSystemXmlApplicationContext("conf/context.xml"); ApplicationContext ctx = new FileSystemXmlApplicationContext("/conf/context.xml"); ~~~ 包括如下也是一样的: ~~~ FileSystemXmlApplicationContext ctx = ...; ctx.getResource("some/resource/path/myTemplate.txt"); FileSystemXmlApplicationContext ctx = ...; ctx.getResource("/some/resource/path/myTemplate.txt"); ~~~ 如果确实需要绝对路径,使用`UrlResource` ~~~java // actual context type doesn't matter, the Resource will always be UrlResource ctx.getResource("file:///some/resource/path/myTemplate.txt"); // force this FileSystemXmlApplicationContext to load its definition via a UrlResource ApplicationContext ctx = new FileSystemXmlApplicationContext("file:///conf/context.xml"); ~~~