下面是各种资源的取得办法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"); 可以使用的前缀有:
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();