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;

}

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值