public interface Resource extends InputStreamSource {
boolean exists();
boolean isReadable();
boolean isOpen();
boolean isFile();
URL getURL() throws IOException;
URI getURI() throws IOException;
File getFile() throws IOException;
ReadableByteChannel readableChannel() throws IOException;
long contentLength() throws IOException;
long lastModified() throws IOException;
Resource createRelative(String relativePath) throws IOException;
String getFilename();
String getDescription();
}
UrlResource
UrlResource包装了一个java.net.URL,并可用于访问通常可以通过URL访问的任何对象,例如文件、HTTPS目标、FTP目标等
ClassPathResource
该类表示应该从类路径获得的资源。它使用线程上下文类装入器、给定的类装入器或给定的类装入资源。
FileSystemResource
PathResource
ServletContextResource
InputStreamResource
ByteArrayResource
ResourceLoader接口是由可以返回(即加载)资源实例的对象实现的。下面的清单显示了ResourceLoader接口定义:
public interface ResourceLoader {
Resource getResource(String location);
ClassLoader getClassLoader();
}
ResourcePatternResolver接口是对ResourceLoader接口的扩展,该接口定义了解析位置模式的策略
public interface ResourcePatternResolver extends ResourceLoader {
String CLASSPATH_ALL_URL_PREFIX = "classpath*:";
Resource[] getResources(String locationPattern) throws IOException;
}
ResourceLoaderAware接口是一个特殊的回调接口,用于标识希望被提供ResourceLoader引用的组件。下面的清单显示了ResourceLoaderAware接口的定义:
public interface ResourceLoaderAware {
void setResourceLoader(ResourceLoader resourceLoader);
}
当一个类实现ResourceLoaderAware并被部署到应用程序上下文中(作为spring管理的bean)时,应用程序上下文将其识别为ResourceLoaderAware。然后,应用程序上下文调用setResourceLoader(ResourceLoader),将自身作为参数提供(记住,Spring中的所有应用程序上下文都实现了ResourceLoader接口)。
如果bean本身将通过某种动态过程确定并提供资源路径,那么bean使用ResourceLoader或ResourcePatternResolver接口来加载资源可能是有意义的。
public class MyBean {
private Resource template;
public setTemplate(Resource template) {
this.template = template;
}
// ...
}
@Component
public class MyBean {
private final Resource template;
public MyBean(@Value("${template.path}") Resource template) {
this.template = template;
}
// ...
}
ApplicationContext ctx = new ClassPathXmlApplicationContext("conf/appContext.xml");
The bean definitions are loaded from the classpath, because a ClassPathResource is used.
/WEB-INF/*-context.xml
com/mycompany/**/applicationContext.xml
file:C:/some/path/*-context.xml
classpath:com/mycompany/**/applicationContext.xml