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();

相關文章
相關標籤/搜索