了解将外部资源或文件(例如文本文件,XML文件,属性文件或图像文件)加载到Spring应用程序上下文中的不同方法。Spring ResourceLoadergetResource()为您提供了一种统一的方法,可以通过资源路径检索外部资源

1. Spring Resource接口代表一种资源

Resource是Spring中用于表示外部资源的通用接口。Spring为Resource接口提供了几种实现。资源加载器的getResource()方法将Resource根据资源路径决定实例化哪个实现。

如何获得资源

Resource banner = resourceLoader.getResource("file:c:/temp/filesystemdata.txt");

您可以指定不同的前缀来创建从不同位置加载资源的路径。

1)要从文件系统加载资源,请使用file前缀。
2)要从类路径加载资源,请使用classpath前缀。
3)您还可以将URL指定为资源路径。

因为您是通过spring的资源加载器访问资源,所以您的自定义资源加载器必须实现ApplicationContextAware接口或ResourceLoaderAware接口。

2.如何使用Spring ResourceLoader获取资源

为了演示下面的各种示例,我在不同的位置放置了一个具有匹配名称的文件,我将展示加载它们中的每一个。

CustomResourceLoader.java 编写如下,将加载的资源文件的内容打印到控制台。

CustomResourceLoader.java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
 
import org.springframework.context.ResourceLoaderAware;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
 
public class CustomResourceLoader implements ResourceLoaderAware
{
 
private ResourceLoader resourceLoader;
 
public void setResourceLoader(ResourceLoader resourceLoader) {
this.resourceLoader = resourceLoader;
}
 
public void showResourceData() throws IOException
{
//This line will be changed for all versions of other examples
Resource banner = resourceLoader.getResource("file:c:/temp/filesystemdata.txt");
 
InputStream in = banner.getInputStream();
 
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
 
while (true) {
String line = reader.readLine();
if (line == null)
break;
System.out.println(line);
}
reader.close();
}
}

applicationContext.xml此文件的文件条目如下:

applicationContext.xml中

<bean id="customResourceLoader" class="com.howtodoinjava.demo.CustomResourceLoader"></bean>

要测试CustomResourceLoaderbean并调用该showResourceData()方法,下面的代码已被使用:

Main.java

@SuppressWarnings("resource")
public static void main(String[] args) throws Exception
{
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
 
CustomResourceLoader customResourceLoader = (CustomResourceLoader) context.getBean("customResourceLoader");
 
customResourceLoader.showResourceData();
}

3.如何加载外部资源

3.1。从应用程序根文件夹加载资源

要从应用程序文件夹加载文件,请使用以下模板:

Resource banner = resourceLoader.getResource("file:data.txt");

3.2。从类路径加载资源

要从类路径加载文件,请使用以下模板:

Resource banner = resourceLoader.getResource("classpath:classpathdata.txt");

3.3。从文件系统加载资源

要从应用程序文件夹外的文件系统加载文件,请使用以下模板:

Resource banner = resourceLoader.getResource("file:c:/temp/filesystemdata.txt");

3.4。从URL加载资源

要从任何URL加载文件,请使用以下模板:

Resource banner = resourceLoader.getResource("//howtodoinjava.com/readme.txt");

以上所有示例都将从其位置加载资源文件,您可以按照自己的方式使用它们。

4.如何注入外部资源名称

在上面的示例中,我们对CustomResourceLoader许多人可能不喜欢的资源名称进行了硬编码,并希望通过上下文文件对其进行配置。使用下面的代码模板可以配置外部资源名称

beans.xml中

<bean id="customResourceLoader" class="com.howtodoinjava.demo.CustomResourceLoader">
 
<property name="resource">
<value>classpath:classpathdata.txt</value>
<!-- or -->
<value>file:data.txt</value>
</property>
 
</bean>

而且CustomResourceLoader会象下面这样:

CustomResourceLoader.java

public class CustomResourceLoader {
 
private Resource resource;
 
public Resource getResource() {
return resource;
}
 
public void setResource(Resource resource) {
this.resource = resource;
}
}

在上下文初始化时,资源将被注入' resource'的属性CustomResourceLoader。可以在spring boot resourceloader示例中使用相同的代码