spring-resource

Spring Resource

Spring Framework简介中介绍了spring的整体框架,这篇文章主要介绍Spring Resource。顾名思义,Resource就是资源的意思。在java中,定义了URL接口用于表示资源,但是这个接口对于一些底层资源的支持却不是很好。比如说:classpath资源,ServletContext资源,File资源等。为了统一资源的访问,spring做了一个抽象,将所有的可访问资源都抽象为Resource。下面看看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();

}

从Resource接口中,我们可以看到一些关于资源的接口方法定义,都是非常基础的抽象。在Spring中,大量使用了该接口,用于表示资源。在spring中,资源主要由如下几类资源构成:URLResource(url代表的资源),ClassPathResource(类路劲下的资源),FileSystemResource(文件资源),ServletContextResource(ServletContext上下文中的资源),InputStreamResource(实现了InputStream的资源),ByteArrayResource(内存资源)。

有了资源的抽象,同样也就需要一个加载资源的抽象类,用于获取资源。在Spring中使用ResourceLoader接口来定义,接口定义如下

public interface ResourceLoader {

    Resource getResource(String location);

}

在spring中,所有的ApplicationContext都继承了ResourceLoader接口,也就是说ApplicationContext的子类都可以作为一个资源加载器类,用于加载资源。下图为ResourceLoader的类接口图:

在这里面,我们可以看到ResourceLoader的子类中有一个ApplicationContext子接口。这个接口同样也是spring-ioc讲到的BeanFactory的子接口。在java中,一个类可以继承只能继承一个类(单继承),但是一个接口却可以继承多个接口。通过这种方式,可以很方便的对接口进行细分与重用。在spring容器中,我们经常需要与ApplicationContext打交道,下面是ApplicationContext的常用用法:

//初始化ApplicationContext,也就是初始化Spring IOC容器
ApplicationContext ctx = new ClassPathXmlApplicationContext("conf/appContext.xml");

ApplicationContext ctx =
    new FileSystemXmlApplicationContext("conf/appContext.xml");

ApplicationContext ctx =
    new FileSystemXmlApplicationContext("classpath:conf/appContext.xml");

//作为ResourceLoader使用
Resource template = ctx.getResource("some/resource/path/myTemplate.txt");

//从容器中获取一个Bean
UsageTracked usageTracked = (UsageTracked) context.getBean("myService");

下面直接贴出ApplicationContext的代码,大家可以看看

/**
 * ApplicationContext是整个Spring框架的核心接口
 *
 * Application继承了EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory,
 *		    MessageSource, ApplicationEventPublisher, ResourcePatternResolver
 *
 * EnvironmentCapable(记录版本信息,比如目前是正式版还是开发版本)
 * ListableBeanFactory(BeanFactory接口的增强接口,提供了迭代访问所有bean的方法)
 * HierarchicalBeanFactory(BeanFactory接口的增强接口,访问父容器的方法,将ioc容器变成parent容器,child * 容器模式)
 * MessageSource(对国际化的支持)
 * ApplicationEventPublisher(ApplicationEvent的发布中心,可以作为一个中心控制器,接受多个ApplicationEv * entListener的注册,观察者设计模式的典型应用)
 * ResourcePatternResolver(ResourceLoader的增强接口,资源加载器)
 *
 * 通过接口的定义,我们可以很明确的看到,ApplicationContext的功能是非常强大的
 */
public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory,
		MessageSource, ApplicationEventPublisher, ResourcePatternResolver {

	/**
	 * 获取容器的id
	 */
	String getId();

	/**
	 * 获取应用的名字
	 */
	String getApplicationName();

	/**
	 * 获取容器的名字
	 */
	String getDisplayName();

	/**
	 * 获取容器启动时间
	 */
	long getStartupDate();

	/**
	 * 获取父容器
	 */
	ApplicationContext getParent();

	/**
	 * 获取自动注入的BeanFactory
	 */
	AutowireCapableBeanFactory getAutowireCapableBeanFactory() throws IllegalStateException;

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-05 05:02:00

spring-resource的相关文章

Spring Resource接口获取资源

本文转自http://elim.iteye.com/blog/2016305 感谢作者 Resource 所有的资源都被可以通过 InputStream 这个类来获取,所以也屏蔽了资源的提供者 ResourceLoader 接口负责资源的统一加载 通过Spring Resource接口获取资源 目录 1       Resource简介 2       通过ResourceLoader获取资源 3       在bean中获取Resource的方式 1       Resource简介 在Spr

Spring @Resource, @Autowired and @Inject 注入

Overview I’ve been asked several times to explain the difference between injecting Spring beans with ‘@Resource’, ‘@Autowired’, and ‘@Inject’. While I received a few opinions from colleagues and read a couple of posts on this topic I didn’t feel like

spring @resource @ Autowired

Spring中什么时候用@Resource,什么时候用@service 当你需要定义某个类为一个bean,则在这个类的类名前一行使用@Service("XXX"),就相当于讲这个类定义为一个bean,bean名称为XXX; 当需要在某个类中定义一个属性,并且该属性是一个已存在的bean,要为该属性赋值或注入时在该属性上一行使用@Resource(name="xxx"),相当于为该属性注入一个名称为xxx的bean. =========================

Spring Resource源码分析

基本信息 Spring为了方便程序调用不同类型的资源而定义的接口.Spring提供若干实现,方便我们针对不同的资源获取资源文件以及对具体内容的操作.常用的有以下三种: 通过 FileSystemResource 以文件系统绝对路径的方式进行访问: 通过 ClassPathResource 以类路径的方式进行访问: 通过 ServletContextResource 以相对于Web应用根目录的方式进行访问. 如下图为基本的类关系图,我们可以看到Resource的主要继承接口,以及对应的三大主类的实

Spring @Resource,@Autowired,@Qualifier的注解注入和区别

spring2.5提供了基于注解(Annotation-based)的配置,我们可以通过注解的方式来完成注入依赖.在Java代码中可以使用 @Resource或者@Autowired注解方式来经行注入.虽然@Resource和@Autowired都可以来完成注入依赖,但它们之间是有区 别的.首先来看一下: @Resource默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来装配注入: @Autowired默认是按照类型装配注入的,如果想按照名称来转配注入,则需要结合@Qu

Spring @Resource、@Autowired、@Qualifier的区别

@Resource默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来装配注入: @Resource注解是J2EE提供,而@Autowired是由Spring提供,故减少系统对spring的依赖建议使用 @Resource的方式: @Autowired默认是按照类型装配注入的,如果想按照名称来转配注入,则需要结合@Qualifier一起使用:

Spring Resource、Autowired、Qualifier的注解注入及区别

 说明和区别 spring4.1 提供了基于注解(Annotation-based)的配置,我们可以通过注解的方式来完成注入依赖.在Java代码中可以使用 @Resource或者@Autowired注解方式来经行注入.虽然@Resource和@Autowired都可以来完成注入依赖,但它们之间是有区 别的.首先来看一下: a.@Resource默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来装配注入: b.@Autowired默认是按照类型装配注入的,如果想按照名称

Spring @Resource、@Autowired、@Qualifier的注解注入及区别

spring2.5提供了基于注解(Annotation-based)的配置,我们可以通过注解的方式来完成注入依赖.在Java代码中可以使用 @Resource或者@Autowired注解方式来经行注入.虽然@Resource和@Autowired都可以来完成注入依赖,但它们之间是有区别的.首先来看一下: @Resource默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来装配注入: @Autowired默认是按照类型装配注入的,如果想按照名称来转配注入,则需要结合@Qua

[spring]@Resource和@Autowired区别对比

@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入. 1.共同点 两者都可以写在字段和setter方法上.两者如果都写在字段上,那么就不需要再写setter方法. 2.不同点 (1)@Autowired @Autowired为Spring提供的注解,需要导入包org.springframework.beans.factory.an

Spring Resource框架体系介绍

Resource介绍 在使用spring作为容器进行项目开发中会有很多的配置文件,这些配置文件都是通过Spring的Resource接口来实现加载,但是,Resource对于所有低级资源的访问都不够充分.例如,没有标准化的URL实现可用于访问需要从类路径或相对于ServletContext获取的资源.(更多关于ServletContext的理解,请访问https://www.cnblogs.com/cxuanBlog/p/10927813.html)虽然可以为专用的URL前缀注册新的处理程序(类