简介:
在标准java.net.URL类以及各种URL前缀处理方式中,并没有提供足够的方式来访问底层的资源。例如,java的URL标准实现中没有相关的方法能够从classpath或者和servletContext相关的地方获取相关的资源。虽然可以针对特殊的URL前缀注册新的处理方式,一般情况下会比较麻烦,并且URL接口仍然会缺少一些别要的功能,例如,需要一个方法来检查URL指向的URL资源是不是存在。
1、Resource接口
spring提供的Resource是一个相对功能完善的访问底层资源的接口。
public interface Resource extends InputStreamSource {
boolean exists();
boolean isOpen();
URL getURL() throws IOException;
File getFile() throws IOException;
Resource createRelative(String relativePath) throws IOException;
String getFilename();
String getDescription();
}
public interface InputStreamSource {
InputStream getInputStream() throws IOException;
}
Resource接口提供的主要的方法有:
1、getInputStream():定位并打开资源,返回能够读取资源的InputStream。(It is expected that)每次被调用的时候都会返回一个新的InputStream。此方法主要是负责调用方能够关闭读取流。
2、exists():返回一个能够表明当前资源文件是否真正存在的逻辑值。
3、isOpen():返回一个逻辑值,它能够表明当前的资源是不是提供了一个打开的流管道。如果逻辑值为true,InputStream就不能被多次读取,并且必须被读取一次后立即将资源关闭避免资源泄露。所有的资源Resource实现一般都为false,并带着异常InputStream。
4、getDescription():返回对当前资源的描述,一般使用资源时被作为错误输出。这个一般是文件的全名或者是资源的URL。
通过其他的方法能够获得资源对应的URL或File对象(条件是Resorce的实现是兼容并支持)。
spring本身大量的应用了抽象的Resource接口,当需要资源的时候,将Resource作为方法参数。在一些spring Api提供的另一些方法中,例如:不同ApplicationContext实现的构造方法中,将一个简单的或者带特殊前缀的字符串路径做为参数来创建相应的context实现。
*****spring内置的Resource实现
spring本身提供了一定数量的可以直接使用的Resource实现。
UrlResource:URL字符前缀识别(file,http,ftp etc),某些类隐含UrlResource用来访问资源(方法参数中含有资源路径前缀classpath……,如果没有前缀则作为一个标准的URL)
ClassPathResource:一般通过线程上下文类加载器(指定的类加载器)或者一个制定的用来加载资源的类。Resource的实现能够将存在于文件系统中的类路径文件识别为java.io.File,对于jar包或者通过servlet引擎等其他任何环境解压的文件是不能够被识别的。为了能够处理上述情况,不同的Resource实现一般支持解析为java.net.URL.
FileSystemResource:(java.io.File)……
ServletContextResource:()
InpurSreamResource:()
ByteArrayResource:()
分享到:
相关推荐
### Spring资源访问详解 #### 资源访问概述 在Spring框架中,资源访问是一个非常重要的功能,它为开发者提供了一种统一的方式去访问不同类型的资源(如文件、URL等)。这一特性使得开发者能够轻松地在不同的环境中...
在Spring框架中,资源访问是核心功能之一,它允许开发者高效、便捷地处理各种类型的资源,包括文件、网络、类路径等。本文将详细介绍Spring如何通过`Resource`接口及其实现类来简化资源的访问。 首先,传统的资源...
Spring Security 是Spring生态系统中的一个组件,用于提供认证(Authentication)和授权(Authorization)功能。它为Web应用程序提供了全面的安全解决方案,包括登录、权限控制、会话管理、CSRF防护等。 2. **核心...
3. **spring-context**:扩展了spring-core和spring-beans,提供了与应用程序环境的交互,如事件发布、国际化支持和资源访问。 4. **spring-aop**:实现AOP功能,包括切面的定义、匹配和执行。 5. **spring-...
3. spring-osgi-io:提供I/O服务,如网络、文件系统访问等,适应OSGi的隔离环境。 4. 依赖库:包括了对Apache Felix或Equinox等OSGi容器的适配器,以及一些基础库,如log4j、commons-lang等。 综上所述,Spring ...
自定义Spring Security的身份验证失败处理方法 在 Spring Security 中,身份验证失败处理方法是一个非常重要的组件,它能够帮助我们处理身份验证失败的情况。然而,默认的身份验证失败处理方法并不总是能够满足我们...
在这个名为"spring5资源.zip"的压缩包中,我们很可能会找到与Spring5相关的各种jar包资源,这些资源可能包括核心容器、数据访问/集成、Web、AOP(面向切面编程)、测试等模块。 1. **核心容器**:Spring的核心模块...
这个名为“spring资源.zip”的压缩包显然包含了一系列与Spring相关的开发文档,旨在帮助初学者掌握Spring的核心概念和技术。让我们深入探讨一下Spring框架的一些关键知识点。 1. **IoC(Inversion of Control)容器...
这个"Spring资源包"包含了全面的Spring开发所需的组件和文档,旨在帮助开发者高效地构建企业级应用。下面,我们将深入探讨Spring框架的核心概念和关键组件。 **1. Spring核心容器** Spring的核心在于其依赖注入...
通过研究这个系统的源代码,开发者可以了解到如何使用Spring Boot快速搭建应用,如何配置Spring MVC处理HTTP请求,如何利用Spring Data访问数据库,以及如何使用Spring Security实现用户认证和授权。此外,还可以...
《基于Spring MVC、Spring、Hibernate、Bootstrap和MySQL的人力资源管理系统》 本项目是一个综合性的企业级应用,采用主流的Java技术栈构建,包括Spring MVC、Spring、Hibernate以及前端的Bootstrap框架,配合关系...
5. **sprign**: 这可能是Spring框架的核心库,包含了Spring的核心模块,如IoC(Inversion of Control,控制反转)容器、AOP支持、数据访问/集成、Web模块等。Spring IoC容器是整个框架的基础,它负责管理对象的生命...
1. 用户认证与授权:使用Spring Security进行用户登录验证,控制不同角色对资源的访问权限。 2. 人力资源管理:设计对应的人力资源实体类,通过Hibernate映射到数据库表,实现员工信息的增删改查。 3. 考勤与工资...
这是一个强大的安全管理框架,它提供了身份验证、授权等功能,可以有效地保护系统资源,防止非法访问。在员工信息管理系统中,Spring Security可以确保只有经过身份验证和授权的用户才能访问特定的员工信息、权限...
OAuth2是一个授权框架,允许第三方应用在用户的许可下访问其私有资源。在SSO场景中,我们可以将OAuth2用作认证服务器,用户登录认证服务器后,获取到的令牌(Access Token)可以用于访问其他系统。Spring Security ...
资源权限提供资源访问权限控制,确保资源的安全性和私密性。 资源统计提供资源使用情况的统计功能,帮助管理员了解资源的使用情况。 3. 用户管理 用户注册与登录支持用户注册和登录功能,确保用户身份的唯一性...
通过`@Secured`、`@PreAuthorize`等注解,可以控制对特定资源的访问。此外,Spring Security还支持OAuth2、JWT等现代安全协议。 6. **异常处理**:Spring MVC提供了统一的异常处理机制,我们可以通过定义`@...
本资源集合题为“spring学习资源共享”,旨在为学习者提供一套全面的Spring教程资料,助力大家提升技能,实现职业发展。 首先,Spring是一个开源的Java平台,它为构建应用程序提供了全面的框架支持。Spring的核心...
综上所述,“Spring+Hibernate+Struts”架构为构建一个完善的资源共享系统提供了坚实的基础。通过整合这三个框架,系统能够实现用户交互、数据持久化以及业务逻辑处理的高效协同,为用户提供稳定、易用的资源共享...
综上所述,Spring库资源涵盖了从核心框架到Web开发、数据访问、安全管理和系统集成等多个方面,为Java开发者提供了一站式的解决方案。而`.m2`目录则作为这些库资源的本地存储,确保了开发过程的顺利进行。