spring mvc resource

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

 

下面是各种资源的取得办法spring

 

1、让类继承ResourceLoaderAware 经过使用 ResourceLoader.getResource() 取得资源数组

                    原理:ApplicationContext会将本身注入到ResourceLoaderAware Bean中,由于ApplicationContext自己就实网络

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

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

                   1.  FileSystemXmlApplicationContext            返回  FileSystemResource                     xml

                   2.  ClassPathXmlApplicationContext               返回  ClassPathResource                        继承

                    3.  XmlWebApplicationContext                          返回  ServletContextResource接口

 

2、 使用ApplicationContext 的getResource()取得 同理由于ApplicationContext是实现了ResourceLoader这个接口资源

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

  

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

理会ApplicationContext的实现类型如:

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

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

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

 

3、以上两种有一个特色是要在程序中提供资源所在的路径,这意味着:资源所在的物理位置将被耦合到代码中,若是资源位置发生了改变就要改写程序,全部第三种方式就是经过依赖注入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();

相关文章
相关标签/搜索