spring mvc resource

  • UrlResource                                    访问网络资源的实现类
  • ClassPathResource                        访问类加载路径里资源的实现类
  • FileSystemResource                     访问文件系统里资源的实现类,使用file前缀来区分相对与绝对路径
  • ServletContextResource              访问相对于ServletContext路径下的资源的实现类
  • InputStreamResource                         访问输入流资源的实现类。尽量不要使用,因为其效率低应使用ByteArrayResource或               FileSystemResouce代替
  • ByteArrayResource                        访问字节数组资源的实现类

 

下面是各类资源的取得办法

 

一、让类继承ResourceLoaderAware 通过使用 ResourceLoader.getResource() 取得资源

                    原理:ApplicationContext会将自己注入到ResourceLoaderAware Bean中,因为ApplicationContext本身就实

             ResourceLoader这个接口。当使用ResourceLoader.getResource()时我们如何得知这是6种Resource中的哪一种Resource

             这要看你这个ApplictionContext是哪个实现方法:

                   1.  FileSystemXmlApplicationContext            返回  FileSystemResource                     

                   2.  ClassPathXmlApplicationContext               返回  ClassPathResource                        

                    3.  XmlWebApplicationContext                          返回  ServletContextResource

 

二、 使用ApplicationContext 的getResource()取得 同理因为ApplicationContext是实现了ResourceLoader这个接口

            与一大点中的说明一样,要根据ApplicationContext的实现类型返回相应的Resource实现类

  

  在第一、二大点中取得Resource的方法本质上是一样的都是使用ApplicationContext取得。但使用前缀时可以不

理会ApplicationContext的实现类型如:

                     FileSystemXmlApplicationContext .getResouce("classpath:bean.xml");      

 虽然ApplicationContext的实现类是FileSystemXmlApplicationContext ,但还是会其在类路径下查询。同理也可以使用ResourceLoader.getResourc("classpath:bean.xml"); 可使用的前缀有:

  1. classpath:
  2. http:
  3. file:
  4. ftp:

 

三、以上两种有一个特点是要在程序中提供资源所在的路径,这意味着:资源所在的物理位置将被耦合到代码中,如果资源位置发生了改变就要改写程序,所有第三种方式就是通过依赖注入Resource的方式.如:

public class Bean{

     private Resouce res;
     public void setRes(Resource res){
          this.res = res;
     }
}

 

<bean id="bean" class="Bean">
     <property name ="res" value="classpath:bookXml" />
</bean>

 

如果使用前缀那么spring会指定具体使用哪个Resouce类,如果不指定那么将使用与当前ApplicationContext相同的资源访问策略来访问资源

 

在ApplicationContext中资源的访问方法

 

创建ApplicationContext通常用下面三种实现类

   1.  FileSystemXmlApplicationContext                               

   2.  ClassPathXmlApplicationContext                                

   3.  XmlWebApplicationContext        

 

当创建时不指定前缀时,那么就按对应的策略来访问资源。当指定前缀时就根据前缀来访问资源如:

ApplicationContext context = XmlWebApplication("bean.xml");                         使用ServletContextResource 来访问

ApplicationContext context = XmlWebApplication("classpath:bean.xml");  使用ClassPathResource来访问

 

使用classpath*:  方法访问时spring将会搜索类加载路径下所有满足该规则的配置文件如:

 

ApplicationContext context = XmlWebApplication("classpath*:bean.xml");

ApplicationContext context = XmlWebApplication("classpath*:bean*.xml");

 

PS: 但 context.gerResource("classpath*:bean.xml");   这样是不行的。因为ApplicationContext 创建时是使用了getResources();

转载于:https://my.oschina.net/u/2552286/blog/1561205

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值